Intereting Posts

Связывание гнезда с портом 80 в ansi c

Когда я пытаюсь связать порт 80 с сокетом в c, я всегда получаю сообщение об ошибке, что у меня нет разрешения на использование этого порта. есть ли простой способ получить это разрешение?

Обычно только суперпользователь (root) может привязываться к «привилегированным» портам (то есть к номерам портов ниже 1024).

Это означает, что вы либо должны запускать свою программу как root, либо сделать свой исполняемый «suid root».

Оба они имеют последствия для безопасности, поэтому вы можете захотеть использовать подход suid и отказаться от привилегий суперпользователя после того, как был вызван вызов bind.

Вы найдете этот урок очень полезным для сетевого программирования с помощью C / C ++.

И, кстати, ANSI C не имеет доступа к сети. Это предоставленные ОС библиотеки (API-интерфейс сокета BSD, также переносимый в Windows как winsock ), которые предоставляют эту возможность.

Порты 1024 и ниже называются привилегированными портами , привязка к этим портам требует повышенного разрешения.

Порты выше 1024 называются Emphemeral Ports . Привязка к ним не требует специальных разрешений.

Самый простой способ получить доступ к привилегированным портам – это пользователь root.

Если вы используете общую систему (например, университетский компьютер), а не root, тогда нет «простого» способа получить это разрешение по дизайну.

Это так же, как @Charles Bailey ставит … и я хотел бы добавить, что именно поэтому в URL-адрес 8080 указывались адреса http-серверов по спецификации порта в URL как http: //some.url : 8080 /

Традиционно только root может связывать сокеты с портами под 1024.

Ответ С.Лотта, возможно, вызвал очень негативные реакции, но его идея далека от глупости: если исходный вопрос касается реальной программы (а не школьного задания), то ее разработка как приложения за HTTP-сервером часто является разумным выбором. Таким образом, вы можете оставить много деталей низкого уровня для хорошей и хорошо отлаженной программы Apache.

Приложение не обязательно должно быть CGI, это может быть модуль Apache. Apache, начиная с версии 2, уже не просто HTTP-сервер. В настоящее время это платформа для разработки сетевых программ. Написание модуля Apache может быть правильным ответом на исходный вопрос (см. Документацию Apache )

Обычные программы не могут связывать «привилегированные» порты – ниже 1024. Это, в основном, устаревшая функция безопасности UNIX-подобных операционных систем.

Бег как суперпользователь, хотя и предлагается многими другими здесь, является плохим решением этой проблемы. Если вы работаете в системе Debian или Ubuntu, я предлагаю установить пакет authbind , который позволит вам предоставить разрешение вашей программы открывать привилегированные порты, не имея при этом никакой необходимости предоставлять вашей программе другие специальные разрешения.

Если вы работаете в любой другой системе, я предлагаю установить debian или ubuntu ;-).

Да, вы можете легко привязываться к порту 80. Используйте Apache. Напишите веб-приложение. Apache привязывается к порту 80 и запускает ваше веб-приложение.

Вы пытаетесь написать следующий Apache? Если это так, вам нужно узнать о вызове API setuid в вашей операционной системе.

Если вы не пишете новую версию Apache, большинство людей использует не-привилегированный порт. 8000 популярна, так же как и 8080.