Web

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

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

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

 

Ответ 1

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

nmap -p 80 example.com

Как уже упоминалось, nmap - это больше, чем просто пинг-для-портов. Это лучший друг аудиторов и хакеров, который предлагает массу интересных опций. Проверьте в документации все возможные флаги.

 

Ответ 2

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

# telnet google.com 80

Trying 74.125.226.48...

Connected to google.com.

Escape character is '^]'.

 

Ответ 3

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

Test-NetConnection <host> -port <port>


Ответ 4

$ nc -vz google.com 80

Connection to google.com 80 port [tcp/http] succeeded!

 

Ответ 5

Можно использовать 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

 

Ответ 6

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

$ curl host:port

 

Например:

 

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

Success.

Вышеупомянутая команда вернет Fail при ненулевых кодах статуса выхода. В некоторых конкретных случаях, таких как пустой или искаженный ответ.

 

Ответ 7

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

 

Ответ 8

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

psping 192.168.2.2:5000

Это часть Windows Sysinternals .

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

 

Ответ 9

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

hping example.com -S -V -p 80

 

Ответ 10

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

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

 

Ответ 11

Вот консольное приложение .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();

        }

    }

 

Ответ 12

Пример ниже находит, какие 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 "Запуск сканирования..."

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 ):

            # вышло время запроса - выход

        else:

            print "%s:%d - closed (%d)" % (address,p,result)

 

        s.close()

print "Сканирование завершено."

 

Запуск сканирования… 

Возможный результат:

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)

Сканирование завершено. 

Четыре переменные в верхней части нужно будет изменить, чтобы они соответствовали таймауту сети, хостам и портам, которые необходимы. 5,0 секунд, на моей VPN, казалось, будет достаточно для стабильной работы, но не всегда давало точные результаты. В моей локальной сети 0,5 было более чем достаточно. 

 

Ответ 13

В оболочке Bash вы можете использовать  pseudo-device file 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

 

Ответ 14

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

Схожие статьи

Web

Как распарсить и обработать HTML/XML в PHP?

Web

Как удалить из строки символы, отличные от UTF-8

Web

Передача массива в запрос с помощью предложения WHERE

Web

Есть ли способ обновить расширение через composer и обойти ошибку ограничения памяти в Magento2

×