Вопрос Возможно ли выполнить ping адрес: порт?


Я не в сети, и у меня есть следующий вопрос, связанный с Linux пинг команда.

Могу ли я только пинговать адрес? Например:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

Или я могу пинговать адрес: порт, например: onofri.org:80?

Если я попробую это, это не сработает:

miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80

Возможно ли пинг что-то вроде адрес: порт? Если это возможно, почему я не пробовал работать?


193
2018-06-16 18:17


происхождения


Что вы пытаетесь достичь? Проверка правильной работы службы требует, чтобы вы действительно запрашивали сервис и оценивали ответ. Веб-сервер мог бы, например, принять ваше соединение, но вернуть ошибку из-за неправильной конфигурации. - Daniel B
Это часть того, что мне нравится в Telnet. вы можете подключиться к веб-серверу и ввести GET /index.html HTTP\1.1 и см. ответ 200 (или код ошибки) вместе с полученной разметкой. - Frank Thomas
@FrankThomas HTTP\1.1? В самом деле? - glglgl
@Navin Может быть HTTP/1.1... - glglgl
@glglgl; что? вы никогда не кладете хак, где должна идти косая черта? но вы правы, это должно быть косой чертой. - Frank Thomas


ответы:


Вы можете использовать Paping, межплатформенное тестирование TCP-порта, эмулирующее функциональность ping (port ping)

(смотрите также Github поскольку code.google.com был обесценен)

paping -p 80 google.com

18
2018-01-21 08:02



Некоторое объяснение того, что делает эта программа, было бы полезно. - David Schwartz
для тех, кто находит этот ответ, как и я, только найти paping не в каких-либо репозиториях и является древним кодом, который даже не компилируется на ARM - прокрутите вниз до ответа «hping». Это идеальное дополнение для ping, когда вам нужно протестировать порт и легко доступен в различных репозиториях (например, Ubuntu, Arch), включая ARM. - Mark


Порты - это концепция UDP а также TCP, Сообщения Ping технически называются ICMP Echo Request а также ICMP Echo Reply которые являются частью ICMP, ICMP, TCP и UDP - «братья и сестры»; они не основаны друг на друге, а три отдельных протокола, которые работают поверх IP.

Поэтому вы не можете ping порт. Что ты Можно do, используется сканер портов, например nmap,

nmap -p 80 onofri.org

Вы также можете использовать telnet onofri.org 80, как это предложено в одном из других ответов (это даст ошибку, если порт закрыт или отфильтрован).


297
2018-06-16 18:19



+1 вы понимаете это правильно. ICMP построен поверх IP, который имеет концепцию IP-адресов, но не портов. TCP и UDP также находятся поверх IP, и именно эти протоколы добавляют «порты». ICMP, TCP и UDP находятся на одном уровне с точки зрения протокола, к которому они относятся. - Jason C
+1. Многие, многие люди думают, что если они не могут пинговать что-то, с которыми они не могут подключиться ... но, как вы говорите, ICMP отличается от TCP и UDP: если вы собираетесь обслуживать, скажем, веб-страницу на TCP 80, чем вам нужно только открыть TCP 80 на брандмауэре, ничто другое (поэтому Ping на тот же IP мог бы (... должен!) быть заблокирован, например) - Olivier Dulac
Для обеспечения точности информации ICMP не является протоколом транспортного уровня, например TCP или UDP. Как и в ряде протоколов, он не полностью вписывается в концептуальные модели сети, но обычно считается протоколом сетевого / межсетевого уровня, как IP. Он также иногда упоминается как протокол L3.5. - YLearn
@BenjiWiebe, согласился, но опять же, для точности должно быть сделано заявление, поэтому я добавил его. Все, что было сказано до сих пор, это то, что ICMP, TCP и UDP связаны между собой. Самый высокий проголосовавший комментарий даже доходит до того, что они все на одном уровне. Хотя это не имеет никакого значения для среднего пользователя, есть много не средних пользователей, которые посещают этот сайт. - YLearn
@OlivierDulac Я не знаю, если вы должен заблокировать его. Большинство веб-серверов, которых я знаю, оставляют его открытым. ICMP позволяет интернету обойти. Почему вы хотите, чтобы люди думали, что они не могут связаться с вами, если смогут? - Cruncher


я использую Telnet, поскольку он встроен в множество платформ без дополнительных загрузок.

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

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Если вы знаете последовательность команд для службы, к которой вы подключаетесь, вы можете ввести команду (HTTP / FTP GET например) и наблюдать за ответом и выходом в терминале. Это очень полезно для тестирования самой службы, поскольку она покажет вам информацию об ошибке, отправленную клиенту, например, ошибки HTTP 500.

Если вы получили сообщение о том, что соединение было отклонено, порт закрыт.

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

77
2018-06-16 18:24



Также, если экран полностью черный, это знак, с которым вы тоже подключены. - Tensigh
Отличное предложение. Я использовал это, чтобы проверить, был ли веб-сервер включен, когда веб-браузер не был простым вариантом. - Brandon
@Brandon нравится, когда sshing в dev машины ^. ^ - Cruncher
Инструменты разработчика в браузерах намного проще, потому что они все равно отправят все соответствующие заголовки HTTP-запросов, но вы сможете проверить полный HTTP-ответ. Опять же, если вы хотите настроить запрос, то telnet - это путь. - Lightness Races in Orbit
Я думаю, что все ответы здесь пропускают самую важную информацию. Технически, не удалось ли «пинговать» порт следующим образом? Вы можете установить соединение TCP / UDP, и подсчитываете, сколько миллисекунд потребовалось для установления этого соединения. - David


Да, используйте Hping для этого:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

Обратите внимание, что для создания необработанных IP-пакетов необходимы привилегии root (или возможности SELinux), как и ping (что, скорее всего, является suid в вашей системе).


40
2018-06-17 15:35



Я бы хотел, чтобы это был «принятый ответ». hping легко находили в нескольких репозиториях, в отличие от paping, который является древним жестоким кодом, который не компилируется на ARM. Кроме того, в отличие от NMAP, haping возвращает код состояния, который легко можно проверить из сценария оболочки, поэтому он отлично подходит для использования в ping. Спасибо за этот ответ, позор, я не прокрутил вниз достаточно далеко, чтобы увидеть его, и должен был найти его на другом веб-сайте. - Mark


Вы можете использовать netcat для подключения к определенному порту, чтобы узнать, установлено ли соединение. Флаг -v увеличит количество подробностей, чтобы показать, открыт ли порт или закрыт. Флаг -z приведет к выходу netcat после его соединения. Затем вы можете использовать коды выхода через $? узнать, установлено ли соединение или нет.

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

Кроме того, вы можете использовать mtr с флагом -T для tcp и -P, чтобы указать порт. Это сделает что-то похожее на трассировку поверх TCP, а не только ICMP. Однако это может быть излишним.

вздох  Мне нужно отредактировать, чтобы добавить этот бит, поскольку мы не можем помещать код в комментарии. Knoppix может делать что-то другое с его версией netcat, но это то, что я получаю от Linux Mint

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]

39
2018-06-16 21:15



проблема в том, что вы пытаетесь nc -z www.google.com 8000  это может занять длительное время - 5 секунд плюс. Если я сделаю -w 1 то это занимает 5 секунд. Если я сделаю -w 3 то это займет примерно 3 раза дольше .. 15 вспышек курсора, 15 секунд. -w 1 составляет одну секунду, но проверяется на cygwin. 5 секунд. Это очень быстро, когда есть сервер на порту, но немного медленный, когда его нет. - barlop
проклинать новые строки в комментариях ... Кажется, это ошибка с cygwin. Тестирование с помощью Монетного двора linux показывает задержку в течение как можно большего количества секунд. запустил это для проверки: date; nc-zw5 www.google.com 8000; date - Falsenames
Я также поддержал @BenjiWiebe с запросами nmap. nc проще вставить в скрипт, но намного проще использовать nmap визуально. - Falsenames
Попробуйте это в knoppix. nc -zv -w 1 www.google.com Как вы можете просто попробовать один раз? Когда я пытаюсь это да, работает -w 1, но каждую секунду он повторяет попытку, пока я не сделаю Ctrl-C. - barlop
Не знаете, что делает версия Knoppix 'nc -zv -w 1 www.google.com 80'. Это отлично работает в моей системе, один раз запрос и падение, как и предполагается -z. Кроме того, без указанного номера порта мой не работает, говоря, что нет указанного порта. - Falsenames


Вы также можете использовать nping (часть nmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds

15
2018-06-23 09:57



nping --tcp -p 80 localhost - K-Gun


Вы можете сделать это в šhell с Python как не очень короткий один лайнер:

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSET; }
$ portping 8.8.8.8 54
CLOSET
$ portping 8.8.8.8 53
OPEN

5
2017-12-18 22:11



Вы не вставляете это в глупый гусь python. Вставьте его в bash. - AXE-Labs
Да, я идиот, комментарий удален, спасибо, что он отлично работал. - rob
CLOSET, loooool - srghma


Вы пытаетесь проверить связь или получить ответ от порта 80 на этом узле? PING попытается установить связь с конкретным хостом через ICMP, который не имеет ничего общего с портами.

Вместо этого попробуйте http://nmap.org/ для проверки информации о порте и тестовой связи:

nmap -v -p 80 onofri.org

2
2018-06-19 15:58



Не знаете, какую версию nmap вы используете. В моей системе требуется, чтобы -v и -p были разделены как «nmap -v -p 80 onofri.org». Это связано с тем, что -v и -vv означают разные вещи, -v принимает больше v в качестве аргумента. - Falsenames