Чи можна надіслати адресу: порт?


212

Я не займаюся мережею, і у мене є таке питання, пов’язане з командою Linux ping .

Чи можу я лише надіслати адресу? Наприклад:

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

Чи можливо пінг щось подібне до адреси: порт ? Якщо це можливо, чому б не те, що я спробував працювати?


8
Що ви намагаєтеся досягти? Перевірка правильності роботи служби вимагає від вас фактично запитувати послугу та оцінювати відповідь. Веб-сервер, наприклад, може прийняти ваше з'єднання, але повернути помилку через неправильну конфігурацію.
Даніель Б

5
Це частина того, що мені подобається в Telnet. ви можете підключитися до веб-сервера та набрати GET /index.html HTTP\1.1та побачити відповідь 200 (чи код помилки) разом із отриманою розміткою.
Френк Томас

7
@FrankThomas HTTP\1.1? Дійсно?
glglgl

5
@Navin Може бути HTTP/1.1...
glglgl

3
@glglgl; що? ти ніколи не ставиш хаку, куди має піти коса риса? але ви праві, це має бути коса риса.
Френк Томас

Відповіді:


20

Ви можете використовувати Paping , тестування міжплатформного TCP-порту, емуляцію функціональності ping (порт ping)

(див. також Github, як code.google.com було знецінено)

paping -p 80 google.com

8
Деякі пояснення того, що робить ця програма, було б корисно.
Девід Шварц

16
для тих, хто знайде цю відповідь, як і я, лише знайти папінг не є в жодних сховищах, а це стародавній код, який навіть не складе на ARM - прокрутіть далі до відповіді «hping». Це ідеальний випадок для пінгу, коли вам потрібно тестувати порт, і він легко доступний у різних сховищах (наприклад, Ubuntu, Arch), включаючи ARM.
Марк

Як я можу встановити paping? Я відвідав репо, але випусків немає. Ах, ніколи .. код Google не був доступний для мене на той час.
Шаян

310

Порти - це концепція UDP та TCP . Ping-повідомлення технічно називаються ICMP Echo Request та ICMP Echo Response, які входять до складу ICMP . ICMP, TCP та UDP - це «брати і сестри»; вони не засновані один на одному, а є трьома окремими протоколами, які працюють над IP-адресою.

Тому ви не pingможете порт. Що ви можете зробити, це використовувати сканер портів, як nmap.

nmap -p 80 onofri.org

Ви також можете використовувати telnet onofri.org 80, як пропонується в одній з інших відповідей (це призведе до помилки, якщо порт закритий або відфільтрований).


22
+1 ви розумієте це правильно. ICMP побудований на вершині IP, який має концепцію IP-адрес, але не портів. TCP і UDP також знаходяться поверх IP, і саме ті протоколи додають "порти". ICMP, TCP та UDP всі на тому ж "рівні" з точки зору протоколу, який вони виконують.
Джейсон C

14
+1. Багато, багато людей думають, що якщо вони не можуть надіслати щось, вони не зможуть підключитися до нього ... але, як ви кажете, ICMP відрізняється від TCP та UDP: якщо ви збираєтесь обслуговувати, скажімо, веб-сторінку на TCP 80, ніж вам потрібно лише відкрити TCP 80 на брандмауері, нічого іншого (так що Ping до того ж IP може бути заблокований (... слід!), наприклад, заблоковано)
Олів'є Дулак

6
Просто для того, щоб інформація була точною, ICMP не є протоколом транспортного рівня, як TCP або UDP. Як і ряд протоколів, він не повністю вписується в концептуальні моделі мережі, але, як правило, вважається протоколом мережевого / мережевого рівня, як і IP. Також іноді його називають протоколом L3.5.
YLearn

2
@BenjiWiebe, погодився, але знову ж таки, для точності слід зробити заяву, і саме тому я додав її. Все, що сказано поки що, це те, що ICMP, TCP та UDP пов'язані між собою. Найвищий коментар, проголосований навіть йде так далеко, що можна сказати, що всі вони на одному "рівні". Хоча це не має різниці для середнього користувача, є безліч середніх користувачів, які відвідують цей сайт.
YLearn

4
@OlivierDulac Я не знаю, чи варто це блокувати. Більшість веб-серверів, яких я знаю, залишають це відкритим. ICMP змушує Інтернет зайти. Чому б ти хотів, щоб люди думали, що не можуть до тебе звернутися, якщо зможуть?
Cruncher

86

Я використовую 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

8
Крім того, якщо екран стає повністю чорним - це знак, що ви також підключені.
Тенсіг

Відмінна пропозиція. Я використовував це для перевірки того, чи був веб-сервер, коли веб-браузер був непростим варіантом.
Брендон

@Brandon люблять коли хлюпають у верстати для розробки ^. ^
Cruncher

Інструменти для розробників у веб-переглядачах набагато простіші, оскільки вони все одно надсилатимуть усі належні заголовки HTTP-запиту, але ви можете перевірити повну відповідь HTTP. Потім знову, якщо ви хочете також підганяти запит, тоді дорога telnet.
Гонки легкості на орбіті

Я думаю, що всі відповіді тут пропускають найважливішу інформацію. Технічно чи не вдалося б "пінг" порту наступним чином? Ви можете встановити TCP / UDP-з'єднання і підраховуєте, скільки мілісекунд знадобилося для встановлення цього з'єднання.
Девід

47

Так, використовуйте 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-пакетів потрібні кореневі привілеї (або можливості SELinux), як і ping (що, швидше за все, відповідає вашій системі).


3
Я б хотів, щоб це була "прийнята відповідь". hping був легко піддається ремонту в декількох репостах, на відміну від папінгу, який є старовинним чітким кодом, який не компілюється в ARM. Також, на відміну від NMAP, хапінг повертає код статусу, який легко засвідчується за допомогою сценарію оболонки, тому це ідеальна заміна для того, де ви б інакше використовували ping. Дякую за цю відповідь, прикро, що я не прокрутився досить далеко, щоб побачити це, і довелося знайти його на іншому веб-сайті.
Марк

Я не можу встановити hping в ubuntu .. Пакет не знайдено .. Але я знайшов. hping3Чи він такий самий, як hping3? @ d33tah
Шаян

Гаразд, я спробував, hping3і він працює на всіх портах. Не має значення закритий чи відкритий .. Як я можу дізнатися, чи порт закритий чи відкритий?
Шаян

46

Ви можете використовувати 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]

проблема полягає в тому, що якщо ви спробуєте, nc -z www.google.com 8000 це може зайняти тривалий час плюс 5 секунд. Якщо я це роблю, -w 1це займає 5 секунд. Якщо я це роблю, -w 3це займе приблизно 3 рази довше .. 15 спалахів курсору, 15 секунд. -w 1покликаний бути однією секундою, але перевірений на cygwin.,. 5 секунд. Це дуже швидко, коли на порту є сервер, але трохи повільно, коли його немає.
барлоп

не проклинайте ніяких нових рядків у коментарях ... Це, здається, помилка з cygwin. Тестування за допомогою Linux Mint показує затримку на скільки секунд вказано. запустив це для перевірки: дата; nc-zw5 www.google.com 8000; дата
Фальшиві імена

Я також підтримав @BenjiWiebe із запитами nmap. nc простіше ввести в сценарій, але набагато простіше використовувати nmap візуально.
Підроблені імена

Спробуйте це в краппікс. nc -zv -w 1 www.google.com Як змусити його просто спробувати один раз? Коли я спробую це, так -w 1 працює, але щосекунди він повторюється, поки я не зроблю Ctrl-C.
барлоп

Не впевнений, що робить Knoppix версія 'nc -zv -w 1 www.google.com 80'. Це прекрасно працює в моїй системі, запит один раз і випадання так само, як -z. Крім того, без вказаного номера порту мій не вдається сказати, що немає порту.
Неправдиві

18

Ви також можете використовувати 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

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

Я перевіряю будь-який порт, (порти, які не відкриті), і я все одно отримую два рукостискання весь час ...
Шаян

8

Ви можете зробити це в оболонці з Python як не такий короткий вкладиш:

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

7

Тільки для довідки, хотів поділитися публікацією від Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# коментар-920398

Він перелічує різні способи, деякі з яких уже розміщені тут. Але найдивнішим для мене було не що інше, як bash:

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

Або надто проста версія: просто дивлячись на результат наступної команди команд:

echo >/dev/{tcp|udp}/{host}/{port}

Корисно під час роботи з випадковими докерними контейнерами.


looking at the output- тільки перевірити код повернення $?може бути корисним. Також він висить на закритих портах, можливо, якийсь час очікування може бути налаштований де завгодно ...
vp_arth

Це рішення виглядає акуратно, але echo >/dev/tcp/{hostname}/{portnumber}не закінчується, коли порт закритий. І echo >/dev/tcp/{hostname}/{portnumber}нічого не показує, навіть якщо порт відкритий, і я бачу його в браузері.
miguelmorin

Привіт mmorin, яку ОС ти використовуєш? У Ubuntu він поводиться так, як очікувалося: якщо порт закритий, я отримую Connection refused. В іншому випадку він закривається, нічого не показує та echo $?показує код виходу1
Jacek

3

Я додаю watchтут інструмент:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com   Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT     STATE  SERVICE
22/tcp open   ssh
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds

3

З нею просто nmap

приклади:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

Для отримання додаткової інформації дивіться це:

введіть у командному рядку це: man nmap

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/


1

Ви намагаєтеся перевірити зв’язок або отримати відповідь від порту 80 на цьому вузлі? PINGспробує налагодити зв’язок з конкретним хостом через ICMP, який не має нічого спільного з портами.

Натомість спробуйте http://nmap.org/, щоб перевірити інформацію про порт та перевірити зв’язок:

nmap -v -p 80 onofri.org

1
Не впевнений, яку версію nmap ви використовуєте. У моїй системі він вимагає розділення -v та -p, як 'nmap -v -p 80 onofri.org'. Це тому, що -v і -vv означають різні речі, -v беручи більше v's як аргумент.
Неправдиві
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.