it-swarm-ru.tech

Пинг определенного порта

Просто быстрая проверка здравомыслия здесь.

Можете ли вы пропинговать конкретный порт машины, и если да, можете ли вы привести пример?

Я ищу что-то вроде ping ip address portNum.

701
Davie

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

nmap -p 80 example.com

Правка: как уже упоминалось flokra, nmap - это больше, чем просто ping-for-ports-thingy. Это лучший друг аудиторов и хакеров безопасности, и он предлагает множество интересных вариантов. Проверьте документ на все возможные флаги.

741
sfussenegger

Откройте сеанс telnet для определенного порта, например:

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

Чтобы закрыть сеанс, нажмите Ctrl+],.

197
Pipo
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
106
Rahul Patil

Если у вас установлена ​​Windows с powershell v4 или новее, вы можете использовать модуль powershell test-netconnection:

Test-NetConnection <Host> -port <port>

Пример: Test-NetConnection example.com -port 80

Этот командлет также имеет псевдоним tnc. Например, tnc example.com -port 80

102
Kjetil Limkjær

Вы можете использовать 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
80
CodhubIV

Нет, вы не можете, потому что ping использует протокол ICMP, который даже не имеет Концепция портов.

26
Martin B

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

$ curl Host:port

Например:

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

Выше команда вернет Fail при ненулевых кодах выхода. В некоторых особых случаях, таких как пустой или неправильно сформированный ответ (см. man curl), вы можете обрабатывать определенные коды выхода как успешные, поэтому, пожалуйста, проверьте это post для более подробного объяснения.

26
kenorb

Я нашел более простое решение с помощью PsPing:

psping 192.168.2.2:5000

Это часть Windows Sysinternals .

PsPing реализует функциональность Ping, TCP ping, задержка и измерение пропускной способности.

22
Ayan Mullick

В Linux вы можете использовать hping , но он использует TCP, а не ICMP.

hping example.com -S -V -p 80
15
c4f4t0r

Ping очень специфичен, но если вы хотите проверить, открыт порт или нет и работает ли на нем окно Windows, тогда PortQry ваш друг.

Я использовал его только для тестирования контроллеров домена на наличие проблем с подключением, но это помогло, так что должно сработать для вас.

11
Rob

Вот быстрое и грязное консольное приложение .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();
        }
    }
8
Luke Puplett

Нет.

Нет гарантии, что служба, работающая на порту, понимает пинг. Это также открывает вопрос о том, какой "аромат" порта вы хотите пинговать, TCP или UDP? Так как "протокол" пинга не использует ни один (пинг реализован с использованием ICMP ), это не имеет большого смысла.

5
unwind

Это единственное решение, которое работает для 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 было более чем достаточно.

4
Mark Ribau

Я совершенно уверен, что 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
fvu

В Bash Shell вы можете использовать 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
2
kenorb

Для этого есть легкий инструмент, который называется tcping: http://www.linuxco.de/tcping/tcping.html

2
Craig

мне повезло, что в Google "пингует определенный порт": http://philwilks.blogspot.com/2008/01/ping-specific-port.html , поэтому НЕТ, вы не можете пинговать конкретный порт

вы можете использовать Nmap, хотя: nmap -p <port> <Host>

0
knittl

Если вы работаете с операционной системой * nix, попробуйте установить и использовать "zenmap", это графический интерфейс для nmap и несколько полезных профилей сканирования, которые очень помогут новому пользователю.

0
user604952