Что использует этот сетевой сокет?

Что использует этот сетевой сокет?

Я пытаюсь использовать NTP для обновления времени на моем компьютере. Однако он выдает мне ошибку:

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

Что означает ошибка "сокет используется"? Как узнать, что использует этот сокет?

Это происходит в моей системе CentOS 4.x, но я также вижу это в FreeBSD 7.x, Ubuntu 10.04 и Solaris 10.

решение1

Ты можешь сделать

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

чтобы увидеть все ваши порты прослушивания, но не доллары, а пончики, которые запущены ntpd:

service ntpd status

А что касается "Что означает socket in use"? Если меня простят за сглаживание некоторых морщин (и за очень простое объяснение, извините, большая часть этого будет для вас поправимой)...TCP/IP (язык Интернета) определяет, что каждый компьютер имеет IP-адрес, который уникально идентифицирует этот компьютер в Интернете. Кроме того, на каждом IP-адресе есть 65 000 пронумерованных портов, к которым можно подключиться.

Когда вы хотите подключиться к веб-серверу, вы открываете сайт в своем браузере, но механизм, который находится за ним, на самом деле подключает вас к порту 80 на IP-адресе веб-сервера. Демон веб-сервера (программа, прослушивающая соединения с портом 80) использует «сокет», чтобы держать этот порт открытым, резервируя его для себя. Только одна программа может использовать один и тот же порт одновременно.

Поскольку у вас был запущен ntpd, он использовал этот порт. «ntpdate» попытался получить доступ к этому порту, но поскольку он уже был открыт, вы получили ошибку «сокет уже используется».

Редактировать
Изменено также для учета UDP

решение2

Вы также можете использовать netstat для поиска открытых сокетов — это гораздо чище, чем использование lsof, как предлагали другие постеры. Попробуйте эту командную строку как root

netstat -lp -u -t

для просмотра всех прослушиваемых подключений, включая их связанные pid и программы. Параметр -l определяет прослушиваемые подключения, -p указывает, что вы хотите увидеть PID/имя, а -t и -u сообщают netstat, что вам нужны только TCP и UDP-подключения (IPv4 и IPv6).

Если вы хотите увидеть числовые имена портов и хостов (т. е. не преобразованные в случае хостов и не преобразованные в имена служб в случае портов), вы можете добавить -nв командную строку выше.

РЕДАКТИРОВАТЬ:Это работает на Linux. Не знаю, насколько хорошо это работает на BSD, так как у меня нет под рукой ни одной машины на базе BSD.

решение3

На FreeBSD вы также можете использовать sockstat в случае, если lsof не работает у вас (например, на виртуализированных системах, в которых по какой-либо причине нет /dev/mem). Чтобы получить список всех программ с прослушивающими сокетами IPv4:

sockstat -l4

решение4

Вы можете использовать его lsof, чтобы узнать, какое приложение использует этот сокет.

Связанный контент