Проверьте с помощью ping-запросов определенный порт

Самый легкий способ получить доступ графически к системе Linux при помощи VNC, часть сервера действительно легко установить (openSuse wiki обеспечивает информацию об этом здесь), и существует набор клиентской работы VNC окон, я обычно использую RealVNC. По моему скромному мнению, это было бы simpliest решением для Вас.

681
задан 9 September 2011 в 22:58
18 ответов

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

nmap -p 80 example.com

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

726
ответ дан 28 November 2019 в 19:13

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

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

11
ответ дан 28 November 2019 в 19:13

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

26
ответ дан 28 November 2019 в 19:13

Я совершенно уверен, что зонд 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
ответ дан 28 November 2019 в 19:13

Нет.

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

5
ответ дан 28 November 2019 в 19:13

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

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

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

194
ответ дан 28 November 2019 в 19:13

Вы можете использовать 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
ответ дан 28 November 2019 в 19:13

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

0
ответ дан 28 November 2019 в 19:13

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

0 секунд на моем VPN казалось достаточно для стабильной работы, меньшее - не всегда (всегда) давало точные результаты. В моей локальной сети 0,5 было более чем достаточно.

0 секунд на моем VPN казалось достаточно для стабильной работы, меньшее - не всегда (всегда) давало точные результаты. В моей локальной сети 0,5 было более чем достаточно.

4
ответ дан 28 November 2019 в 19:13

Вот быстрое и грязное консольное приложение .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
ответ дан 28 November 2019 в 19:13
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
102
ответ дан 28 November 2019 в 19:13

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

hping example.com -S -V -p 80
15
ответ дан 28 November 2019 в 19:13

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

2
ответ дан 28 November 2019 в 19:13

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

Test-NetConnection <host> -port <port>

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

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

93
ответ дан 28 November 2019 в 19:13

Я нашел более простое решение, используя PsPing:

psping 192.168.2.2:5000

Это часть Windows Sysinternals.

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

21
ответ дан 28 November 2019 в 19:13

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

$ curl host:port

Например:

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

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

26
ответ дан 28 November 2019 в 19:13

В оболочке 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
1
ответ дан 28 November 2019 в 19:13

Похоже, что разумное предложение CMCDragonkai о nping не было превращено в правильный ответ.

nping example.com --tcp-connect -p 80,443
1
ответ дан 18 December 2020 в 12:23

Теги

Похожие вопросы