Ping конкретний порт


670

Тут просто швидка перевірка санітарності.

Чи можете ви надати пінг конкретного порту машини, і якщо так, чи можете ви навести приклад?

Я шукаю щось подібне ping ip address portNum.


1
для Windows це питання можна перевірити
npocmaka

Відповіді:


720

Ви не можете пінг-портів, оскільки Ping використовує ICMP, який не має поняття портів. Порти належать до протоколів транспортного рівня, таких як TCP і UDP. Однак ви можете використовувати nmap, щоб побачити, чи відкриті порти чи ні

nmap -p 80 example.com

Редагувати: Як згадувала флокра, nmap - це більше, ніж просто вміст ping-for-ports. Це ревізори безпеки та хакери - найкращий друг і постачається з великою кількістю класних варіантів. Перевірте документ на всі можливі прапори.


15
Ви можете додати, -PNщоб пропустити відкриття хоста nmap, як правило, перед тестуванням заданого порту.
флокра

27
Щоб врятувати деяким людям певні проблеми: nmap / можна / бути встановленим у Windows із посилання (або google nmap windows), АЛЕ це не працює над VPN. Здається, PaPing не міг сканувати діапазон адрес. Нижче я опублікував скрипт Python, який буде працювати над VPN, щоб сканувати діапазон портів для діапазону адрес.

23
Для інших: nmap не існує в Mac OS X, ви можете встановити nmap через homebrew brew install nmapабо MacPorts.
Шосе життя

17
nping краще підходить для цього завдання, ніж nmap. nping є частиною розподілу nmap.
CMCDragonkai

6
Mac OSX має "Network Utility", який має вкладку сканера портів
Shanimal

191

Відкрийте сеанс telnet для конкретного порту, наприклад:

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

Щоб закрити сеанс, натисніть Ctrl+ ].


23
netcatтакож чудово працює і є менш багатослівним.
петрус

3
Telnet добре працює для цього, якщо порт - це порт TCP.
Falcon Momot

6
netcat працює і з UDP (nc -u)
Цветомир Димитров

1
Для користувачів Mac - netcatзараз вбудована MacOS HighSierra, де telnet можна встановити з HomeBrewbrew install telnet
sandiejat

98
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!

10
Використовуйте timeяк у, time nc -vz www.example.com 80і ви також матимете своєрідну RTT.
xebeche

3
Єдине рішення, яке працює на екземплярах Amazon EC2 без будь-якої установки.
Масадов

що таке -z? ncat 6.40 на rhel7 дає невідомий варіант
Tagar

@Tagar згідно довідки у версії Ubuntu, -z - це режим Zero-I / O, який використовується для сканування.
Ben Mordecai

88

Якщо ви перебуваєте у встановленні Windows з поглибленням v4 або новішою версією, ви можете використовувати модуль тестової підключення powerhell:

Test-NetConnection <host> -port <port>

Приклад: Test-NetConnection example.com -порт 80

Цей командлет також має псевдонім tnc. Напрtnc example.com -port 80


80

Ви можете використовувати PaPing:

http://code.google.com/p/paping

C:\>paping.exe www.google.com -p 80 -c 4
paping v1.5.1 - Copyright (c) 2010 Mike Lovell

Connecting to www.l.google.com [209.85.225.147] on TCP 80:

Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=25.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80

Connection statistics:
        Attempted = 4, Connected = 4, Failed = 0 (0.00%)
Approximate connection times:
        Minimum = 24.00ms, Maximum = 25.00ms, Average = 24.25ms

1
Або замість папірування ви можете використовувати криптування, яке було набагато довше, і підтримує пінг із деяких служб, а також портів.

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

@LukePuplett просто змінити число 80 у прикладі. Запустіть його, набравши paping.exe <ім'я хоста / IP> -p <номер номера> -c <кількість спроб>
Девід Коста

Це чудово працює. використовувати -c *для постійного папірування (?).
користувач2924019


26

Спробуйте curlкоманду, наприклад:

$ curl host:port

Наприклад:

$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.

Наведена вище команда поверне Fail у ненульових кодах статусу виходу. У деяких окремих випадках, наприклад, порожній або некоректний відповідь (див man curl), ви можете обробляти спеціальні коди виходу успішних, тому , будь ласка , перевірте цей пост для більш докладного пояснення.


3
Мені це подобається, тому що curlвін за замовчуванням присутній у CentOS, тому мені нічого не потрібно встановлювати.
bdemarest

curl працював над Raspberry Pi (distro Raspian)
Джон М

1
Це, безумовно, найелегантніше та універсальне рішення. Я трохи підмітив його, щоб зробити його акуратним:IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
Lefty G Balogh,

21

Я знайшов більш просте рішення за допомогою PsPing:

psping 192.168.2.2:5000

Це частина Windows Sysinternals .

PsPing реалізує функціональність Ping, вимірювання затримки та пропускну здатність TCP.


1
Також PsPing походить від команди Microsoft SysInternal, тому це може вважатися трохи більш законним при роботі з іншими людьми, орієнтованими на Microsoft. (І має кращий функціонал, ніж дуже старий PortQry)
мартивіс

Перевага PSPing полягає в тому, щоб забезпечити вимірювання затримки при використанні користувальницького порту, що тест Test-NetConnection не може зробити (він повідомляє лише про час відгуку ICMP).
Джефф Майлз

14

У Linux ви можете використовувати hping, але він використовує TCP, а не ICMP.

hping example.com -S -V -p 80

1
hping (hping3 в моєму ubuntu) відмінно. Він періодично повторює зонд, як це робить ping, і на відміну від багатьох запропонованих тут інструментів. Він також перевіряє, чи проходить пакет, і чи відкритий порт. Якщо він відкритий, ви отримуєте flags=SA(тобто SYN ACK), а якщо він закритий, ви отримуєте flags=SR(тобто SYN RST). Зауважте, що вам, напевно, тут не потрібен -Vпрапор, але для запуску hping вам потрібен sudo / root.
mc0e

Відмінно! На відміну від багатьох інших відповідей, це повідомляє про затримку RTT, як pingі пінг до зупинки.
Едвард Андерсон

11

Ping дуже специфічний, але якщо ви хочете перевірити, чи відкритий порт чи ні, чи працює у вас вікно Windows, то PortQry - ваш друг.

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


1
Портал PortQry був спочатку випущений командою MS Exchange в 1999/2000 рр., Але, здається, остання версія MS його приголомшила, видаливши можливість запиту віддалених портів (здоров'я та безпека).
Люк Пуплетт

8

Ось швидкий і брудний додаток .NET консолі:

    static void Main(string[] args)
    {
        string addressArgument = null, portArgument = null;

        System.Net.Sockets.TcpClient tcpClient = null;

        try
        {
            addressArgument = args[0];
            portArgument = args[1];

            int portNumber;
            portNumber = Int32.Parse(portArgument);

            tcpClient = new System.Net.Sockets.TcpClient();
            tcpClient.ReceiveTimeout = tcpClient.SendTimeout = 2000;


            IPAddress address;
            if (IPAddress.TryParse(args[0], out address))
            {
                var endPoint = new System.Net.IPEndPoint(address, portNumber);
                tcpClient.Connect(endPoint);
            }
            else
            {
                tcpClient.Connect(addressArgument, portNumber);
            }

            Console.WriteLine("Port {0} is listening.", portArgument);
        }
        catch (Exception e)
        {
            if (e is SocketException || e is TimeoutException)
            {
                Console.WriteLine("Not listening on port {0}.", portArgument);
            }
            else
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("    portquery [host|ip] [port]");
            }
        }
        finally
        {
            if (tcpClient != null)
                tcpClient.Close();
        }
    }

5

Немає.

Немає гарантії, що служба, що працює на порту, розуміє ping. Це також відкриває питання про те, який "аромат" порту ви хочете ping, TCP або UDP? Оскільки ping "протокол" не використовує жодного (ping реалізований за допомогою ICMP ), це не має великого сенсу.


4

Я повністю впевнений, що зонд Nagios check_tcp робить те, що ви хочете. Їх можна знайти тут, і хоча вони розроблені для використання в контексті Nagios, всі вони є окремими програмами.

$ ./check_tcp -H host -p 22
TCP OK - 0.010 second response time on port 22|time=0.009946s;0.000000;0.000000;0.000000;10.000000

4

Це єдине рішення, яке працює для VPN з клієнтською машиною Windows Vista або Windows 7 , оскільки інші перелічені відповіді просто не функціонують. Ця відповідь раніше була видалена і не повинна була бути, оскільки це єдине рішення для спільної справи в реальному світі. Оскільки для видалення немає жодної апеляції, я репостую, щоб врятувати інших розчарування, намагаючись використати інші відповіді.

У наведеному нижче прикладі встановлено, які IP-адреси в VPN, у яких VNC / порт 5900 відкритий разом із клієнтом, що працює в Windows 7.

Короткий сценарій Python (v2.6.6) для сканування заданого списку IP-адрес та портів:

from socket import *

fTimeOutSec = 5.0
sNetworkAddress = '192.168.1'
aiHostAddresses = range(1,255)
aiPorts = [5900]

setdefaulttimeout(fTimeOutSec)
print "Starting Scan..."
for h in aiHostAddresses:
    for p in aiPorts:
        s = socket(AF_INET, SOCK_STREAM)
        address = ('%s.%d' % (sNetworkAddress, h))
        result = s.connect_ex((address,p))
        if ( 0 == result ):
            print "%s:%d - OPEN" % (address,p)
        elif ( 10035 == result ):
            #do nothing, was a timeout, probably host doesn't exist
            pass
        else:
            print "%s:%d - closed (%d)" % (address,p,result)

        s.close()
print "Scan Completed."

Результати виглядали так:

Starting Scan...
192.168.1.1:5900 - closed (10061)
192.168.1.7:5900 - closed (10061)
192.168.1.170:5900 - OPEN
192.168.1.170:5900 - closed (10061)
Scan Completed.

Чотири змінних у верхній частині потрібно змінити, щоб відповідати будь-якому потрібному часу, мережі, хостам і портам. 5,0 секунди на моєму VPN здавалося достатньою для належної роботи, менше не завжди (завжди) давала точні результати. У моїй локальній мережі 0,5 було більш ніж достатньо.


2
Відмінно працює на клієнті Win 7 XP Pro / Win Server 2008 R2 для діагностики закритого порту. (Мені довелося використовувати пороговий час очікування 30 секунд, але це може бути проблема з конкретним середовищем сервера, не проблема з цим кодом)
David Zemens


1

У оболонці Bash можна використовувати файл псевдо-пристрою TCP , наприклад:

</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed

Ось версія, що реалізує тайм-аут 1 секунду:

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed

0

Якщо ви використовуєте операційну систему * nix, спробуйте встановити та використовувати «zenmap», це графічний інтерфейс для nmap і має кілька корисних профілів сканування, які є чудовою допомогою новому користувачеві.


Zenmap також доступний для вікон.
Нік Янг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.