Frage

Wenn ich versuche, Port zu binden, 80 an eine Steckdose in c, erhalte ich immer den Fehler, dass ich nicht die Erlaubnis haben diesen Port zu verwenden. ist es eine einfache Möglichkeit, diese Erlaubnis zu bekommen?

War es hilfreich?

Lösung

Regel nur die Superuser (root) zu 'privilegierte' Ports binden kann (d.h. diese Portnummern unter 1024).

Das bedeutet, dass Sie entweder Ihr Programm als root ausführen oder die ausführbare Datei ‚suid root‘ machen.

Beide haben Sicherheitskonsequenzen, so dass Sie mit dem suid Ansatz betrachten mögen und Privilegien Super-User zu verzichten, wenn der bind Aufruf vorgenommen wurde.

Andere Tipps

Sie finden dieses Tutorial sehr nützlich für Netzwerk-Programmierung mit C / C ++.

Und, nebenbei gesagt, ANSI C hat keine Möglichkeit, auf das Netzwerk zuzugreifen. Es ist die OS mitgelieferten Bibliotheken (der BSD-Socket-API, auch auf Windows als winsock portiert), die diese Fähigkeit zur Verfügung stellen.

Ports 1024 und unten genannt werden Privilegierte Ports , erfordert erhöhte Erlaubnis an diese Ports binden.

Ports über 1024 genannt Emphemeral Ports . erfordert keine speziellen Berechtigungen für diese Bindung.

Der einfachste Weg, um Zugang zu privilged Ports zu gewinnen ist der Root-Benutzer zu sein.

Wenn Sie auf einem gemeinsamen System sind (wie ein Universitäts Computer) und nicht die Wurzel dann gibt es keine ‚einfache‘ Art und Weise, dass die Erlaubnis zu bekommen, von Entwurf.

Es ist nur so, wie @Charles Bailey ausdrückt ... und ich mag hinzufügen, dass aus diesem Grunde eine http-Server-Adressen auf 8080 von Portangabe in der URL: http: //some.url : 8080 /

Traditionell nur root kann Sockets Ports unter 1024 binden.

S.Lott Antwort ausgelöst haben kann sehr negative Reaktionen, aber seine Idee ist gar nicht dumm: wenn die ursprüngliche Frage für ein echtes Programm ist (keine Schulaufgabe), es als eine Anwendung hinter einem HTTP-Server zu entwickeln ist oft ein vernünftige Wahl. Auf diese Weise können Sie eine Menge von Low-Level-Details zu einem guten und gut ausgetestet Programm, Apache verlassen.

Die Anwendung hat keine CGI zu sein, kann es ein Apache-Modul sein. Apache ab Version 2 ist nicht mehr nur ein HTTP-Server. Es ist jetzt eine Plattform, um Netzwerk-Programme zu entwickeln. Das Schreiben eines Apache-Modul kann die richtige Antwort auf die ursprüngliche Frage (siehe Apache Dokumentation )

Normale Programme nicht „privilegiert“ Ports binden können -. Diese unter 1024. Dies ist ein meist veraltetes Sicherheitsmerkmal von UNIX-ähnlichen Betriebssystemen

als Superuser Rennen, obwohl hier von vielen anderen vorgeschlagen, ist eine schlechte Lösung für dieses Problem. Wenn Sie auf einem Debian oder Ubuntu-System ausgeführt werden, empfiehlt die Installation ich die authbind Paket, das wird können Sie Ihr Programm Erlaubnis zu öffnen privilegierten Ports, ohne tatsächlich geben Sie Ihrem Programm alle anderen speziellen Berechtigungen erteilen.

Wenn Sie auf einem anderen System laufen lassen, schlage ich vor, die Installation von Debian oder Ubuntu, -).

Ja, können Sie leicht binden an Port 80 Verwendung von Apache. Schreiben Sie eine Web-Anwendung. Apache bindet an Port 80 und läuft Ihre Web-Anwendung.

Sind Sie versuchen, die nächste Apache zu schreiben? Wenn ja, müssen Sie über den setuid- API-Aufruf in Ihrem Betrieb lernen System.

Wenn Sie nicht eine neue Version von Apache zu schreiben, verwenden die meisten Menschen ein nicht-privilegiert Port. 8000 ist sehr beliebt, so ist 8080.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top