На Linux, как проверить, находится ли порт в состоянии прослушивания, не пытаясь подключиться - PullRequest
4 голосов
/ 31 мая 2010

Как проверить с помощью C, находится ли порт на моей локальной машине (если требуется, передав IP или интерфейс) также в состоянии прослушивания? Я не хочу подключаться к этому порту для проверки, потому что я не хочу раздражать службу за этим портом.

Я хочу использовать это для добавления отсутствующего элемента net.tcp.listen в Zabbix.

РЕДАКТИРОВАТЬ - ЭТО НАСТОЯЩИЙ ОТВЕТ:

Правильный способ - читать таблицы сокетов:

/ Proc / нетто / ТСР / Proc / нетто / tcp6

Они содержат такие строки, как:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
0: 00000000:1F40 00000000:0000 0A 00000000:00000000 00:00000000 00000000   101        0 4083927 1 f5d15240 750 0 0 2 -1
1: 00000000:2742 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1002        0 6100 1 decd76c0 750 0 0 2 -1

и может быть легко проанализирован для прослушивания сокетов (dst: 00000000: 0000). Strats на netstat показывает, что netstat работает так же.

Ответы [ 5 ]

6 голосов
/ 31 мая 2010

Просто попробуйте открыть порт для прослушивания. Вы получите ошибку.

Нет способа украсть порт из другого процесса, так что это будет безопасно и, конечно, легко реализовать, поскольку не требует дополнительного кода, кроме правильной обработки ошибок.

2 голосов
/ 31 мая 2010

Правильный способ - прочитать таблицы сокетов:

/ Proc / нетто / ТСР / Proc / нетто / tcp6

Они содержат строки типа:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
0: 00000000:1F40 00000000:0000 0A 00000000:00000000 00:00000000 00000000   101        0 4083927 1 f5d15240 750 0 0 2 -1
1: 00000000:2742 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1002        0 6100 1 decd76c0 750 0 0 2 -1

и может быть легко проанализирован для прослушивания сокетов (dst: 00000000: 0000). Strats на netstat показывает, что netstat работает так же.

2 голосов
/ 31 мая 2010

Что-то вроде netstat?

`netstat -anp`

Перечислит все порты и должен выполнить трюк.

Поскольку это программное обеспечение с открытым исходным кодом, вы, вероятно, можете черпать вдохновение в нем. И я верю, что это написано на C.

0 голосов
/ 31 мая 2010

В соответствии с вашим запросом кажется, что вы хотите проверить открытый порт на вашем сервере, но уверены, какую команду нужно выполнить. Не нужно беспокоиться, например, мы пытаемся выяснить, открыт ли порт 80 на вашем сервере.

Первый вход на сервер как пользователь root

root@[~]# whoami
root

Теперь выполните следующую команду.

root@[~]# netstat -anp | grep :80

Это даст следующий вывод, если порт 80 открыт.

tcp        0      0 78.129.128.40:80            207.46.12.20:62746          TIME_WAIT   -
tcp        0      0 78.129.128.40:80            74.53.3.132:47003           TIME_WAIT   -
tcp        0      0 78.129.128.40:80            85.9.80.110:63325           FIN_WAIT2   -

И если порт 80 заблокирован на вашем сервере, вы не получите никакого вывода.

Вы также можете использовать следующий URL для проверки открытых портов на вашем сервере.

http://www.yougetsignal.com/tools/open-ports/

С уважением, Gunjan

0 голосов
/ 31 мая 2010

Я не знаю, хотите ли вы просто посмотреть, правильно ли открыты ваши порты или вы хотите каким-то образом интегрировать это в приложение.Если у вас предыдущий случай

nmap localhost

должен обработать его для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...