Для чого використовується цей мережевий сокет?


18

Я намагаюся використовувати 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.


Відповіді:


20

Ви можете зробити

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

щоб побачити всі ваші порти прослуховування, але долари на пончики, на яких працює ntpd:

service ntpd status

А щодо "Що означає розетка у використанні"? Якщо мені можна пробачити за розгладження деяких зморшок (і за саме основне пояснення, вибачення за більшість цього виправляємо для вас) ... TCP / IP (мова в Інтернеті) визначає, що кожен комп'ютер має IP-адресу, який однозначно ідентифікує цей комп’ютер в Інтернеті. Крім того, на кожній IP-адресі є 65 000 пронумерованих портів, до яких можна підключитись.

Коли ви хочете підключитися до веб-сервера, ви відкриваєте сайт у своєму браузері, але обладнання під ним насправді підключає вас до порту 80 в IP-адресі веб-сервера. Демон веб-сервера (програма, яка прослуховує з'єднання з портом 80) використовує "сокет", щоб утримувати цей порт відкритим, зберігаючи його для себе. Тільки одна програма може одночасно використовувати один і той же порт.

Оскільки у вас запущено ntpd, він використовував цей порт. 'ntpdate' намагався отримати доступ до цього порту, але оскільки він уже був відкритим, ви отримали помилку 'socket вже використовується'.

Редагувати
Змінено для облікового запису для UDP


1
lsof скеля мій світ! grep на IPv4, а також знаходити різні речі на основі IP.
geoffc

"вибачте всіх, хто це вже знав" - не вибачайтесь. Однією метою цього сайту є надання хороших відповідей на поширені запитання. Метою цієї ранньої бета-версії є надання вмісту.
Стефан Ласєвський

Я знаю, але я хотів переконатися, що запитуючий чоловік знає, що я не намагаюся поговорити з ними.
Метт Сіммонс

Я задав це питання, а ти не розмовляв зі мною. Я також знаю відповідь, але вважаю, що це хороше питання для бета-версії. І ваша відповідь була набагато краща, ніж все, що я б написав;)
Стефан Ласєвський

@MattSimmons немає Isofкоманди в моєму CentOS 7.
три блоки

10

Ви також можете використовувати netstat для пошуку відкритих розеток - це набагато чистіше, ніж використання lsof, як запропонували інші плакати. Спробуйте цей командний рядок як корінь

netstat -lp -u -t

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

Якщо ви хочете побачити імена числових портів і хостів (тобто не вирішено у випадку хостів і не перетворено на імена служб у випадку портів), ви можете додати -nдо командного рядка вище.

EDIT: Це працює в Linux - я не знаю, наскільки добре він працює на BSD, оскільки у мене немає ящиків на базі BSD.


+1: це єдина відповідь, яка фактично показує процес ntpd (який слухається в UDP за замовчуванням).
Стефан Ласєвський

Для людей: Ваші прапори еквівалентніnetstat --listen --programs --udp --tcp
Стефан Ласєвський

1
FreeBSD не підтримує '-p' ("Показувати програми"), тому люди використовують LSOF. Він також не підтримує прапори -l ("Show Listening Sockets"), але я думаю, що ви можете це зробити за допомогою | grep LISTEN, але це виключає з'єднання UDP. Але в іншому випадку я думаю, що еквівалентні прапори на FreeBSD є:, netstat -p udp -p tcp -aале netstat -aможуть бути і простішими.
Стефан Ласєвський

@Stefan: У моїй відповіді будуть також відображені UDP-розетки.
kbyrd

@kbyrd: Цікаво. Він не показує пакети UDP для мене. Дивіться мій коментар до вашого повідомлення.
Стефан Ласєвський

2

У FreeBSD ви також можете використовувати sockstat у випадку, якщо lsof не працює для вас (наприклад, у віртуалізованих системах, які з будь-якої причини не мають / dev / mem). Щоб отримати список усіх програм із прослуховуванням IPv4-розеток:

sockstat -l4

1

Як корінь, зробіть це:

lsof | grep IPv4 | grep LISTEN

Це покаже вам всі процеси, які прослуховуються в IPv4-сокетах. Ви можете додати, -bщоб не lsofробити деяких речей, які можуть його заблокувати. Якщо ви зробите це ви , ймовірно , також перенаправити stderrдо /dev/null.


Для мене, схоже, це не показує udp-пакети. Я тестую коробку Ubuntu, на якій працює rsyslogd, слухаю порт 514 / udp.
Стефан Ласєвський

Мені потрібно зробити, sudo lsof |grep UDPщоб побачити пакети UDP.
Стефан Ласєвський

1

Ви можете lsofзнайти, яке саме додаток використовує цей сокет.


0

Гра з цим трійком в одному в ОС X 10.9.5:

sudo lsof | grep \ IPv | sort ; clear ; sudo lsof -U ; clear ; sudo netstat -a


0

З FreeBSD використовуйте -uперемикач, щоб він ntpdateвикористовував непривілейований порт.

Подобається: ntpdate -v -b -u 0.freebsd.pool.ntp.org

Використовуйте, man ntpdateщоб побачити, що -vі що -bробити.


У ntpdate на Debian є -uможливість, оскільки він з ntp.org, я думаю, що у більшості систем є.
RobertL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.