Вопрос: Возможно ли выполнить 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

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


191
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
@JasonC Я уверен! Я получил свой первый Mortarboard и мой первый Guru из-за этого! - BenjiWiebe
Для обеспечения точности информации ICMP не является протоколом транспортного уровня, например TCP или UDP. Как и в ряде протоколов, он не полностью вписывается в концептуальные модели сети, но обычно считается протоколом сетевого / межсетевого уровня, как IP. Он также иногда упоминается как протокол L3.5. - 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

76
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 в вашей системе).


39
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]

37
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