Вы не можете пинговать порты, так как Ping использует ICMP, который не имеет понятия портов. Порты принадлежат протоколам транспортного уровня, таким как TCP и UDP. Тем не менее, вы можете использовать nmap, чтобы увидеть, открыты порты или нет
nmap -p 80 example.com
Редактировать: как уже упоминалось flokra, nmap - это больше, чем просто ping-for-ports-thingy. Это лучший друг аудиторов и хакеров безопасности, и он предлагает множество интересных вариантов. Проверьте документ на все возможные флаги.
Возможно, вы захотите добавить, -PNчтобы пропустить обнаружение хоста, которое обычно делает nmap перед тестированием данного порта.
Flokra
27
Чтобы избавить некоторых людей от некоторых проблем: nmap / можно / установить на windows по ссылке (или в google nmap windows), НО он не работает через VPN. Похоже, что PaPing не может сканировать диапазон адресов. Ниже я разместил скрипт Python, который будет работать через VPN для сканирования диапазона портов по диапазону адресов.
23
Для других: nmap не существует в Mac OS X, вы можете установить nmap через homebrew brew install nmapили MacPorts.
Highway of Life
17
nping лучше подходит для этой задачи, чем nmap. nping является частью дистрибутива nmap.
CMCDragonkai
6
В Mac OSX есть «Network Utility», в которой есть вкладка «Сканер портов»
Shanimal,
192
Откройте сеанс telnet для определенного порта, например:
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
Приведенная выше команда вернет Fail при ненулевых кодах выхода. В некоторых особых случаях, таких как пустой или неправильно сформированный ответ (см. man curl), Вы можете обрабатывать определенные коды выхода как успешные, поэтому просмотрите этот пост для более подробного объяснения.
Мне это нравится, потому что curlон присутствует по умолчанию в CentOS, поэтому мне не нужно ничего устанавливать.
bdemarest
Керл работал над Raspberry Pi (дистрибутив 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."
Кроме того, PsPing исходит от команды Microsoft SysInternal, поэтому его можно считать немного более законным, когда имеешь дело с другими людьми, ориентированными на Microsoft. (И имеет лучшую функциональность, чем очень старый PortQry)
martyvis
Преимущество PSPing заключается в обеспечении измерения задержки при использовании пользовательского порта, чего не может сделать Test-NetConnection (он только сообщает время ответа ICMP).
Джефф Майлз
14
В Linux вы можете использовать hping, но он использует TCP, а не ICMP.
hping (hping3 в моем Ubuntu) отлично. Он периодически повторяет зондирование, как это делает пинг, и в отличие от многих инструментов, предложенных здесь. Он также проверяет, проходит ли пакет и открыт ли порт. Если он открыт, вы получаете flags=SA(т.е. SYN ACK), а если он закрыт, вы получаете flags=SR(т.е. SYN RST). Обратите внимание, что вам, вероятно, здесь не нужен -Vфлаг, но вам нужен sudo / root для запуска hping.
mc0e
Отлично! В отличие от многих других ответов, это сообщает о задержке RTT, как pingи пингует до остановки.
Эдвард Андерсон
11
Ping очень специфичен, но если вы хотите проверить, открыт порт или нет и работает ли Windows-бокс, то PortQry - ваш друг.
Я использовал его только для тестирования контроллеров домена на наличие проблем с подключением, но это помогло, так что должно сработать для вас.
PortQry был первоначально выпущен в 1999/2000 годах командой MS Exchange, но последняя версия 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();
}
}
Там нет никакой гарантии, что служба, работающая на порту, понимает пинг. Это также открывает вопрос о том, какой «вкус» порта вы хотите пинговать, TCP или UDP? Поскольку пинг «протокол» не использует ни один (пинг реализован с использованием ICMP ), это не имеет большого смысла.
Я совершенно уверен, что 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
Это единственное решение, которое работает для 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."
Четыре переменные в верхней части необходимо изменить, чтобы они соответствовали требуемому времени ожидания, сети, хостам и портам. 5,0 секунд на моем VPN было достаточно для правильной работы, меньшее не всегда давало точные результаты. В моей локальной сети 0,5 было более чем достаточно.
Отлично работает на клиенте Win 7 XP Pro / Win Server 2008 R2 для диагностики закрытого порта. (Мне пришлось использовать 30-секундный порог тайм-аута, но это может быть проблемой с конкретной серверной средой, а не с этим кодом)
Если вы работаете с операционной системой * nix, попробуйте установить и использовать «zenmap», это графический интерфейс для nmap и несколько полезных профилей сканирования, которые очень помогут новому пользователю.
Ответы:
Вы не можете пинговать порты, так как Ping использует ICMP, который не имеет понятия портов. Порты принадлежат протоколам транспортного уровня, таким как TCP и UDP. Тем не менее, вы можете использовать nmap, чтобы увидеть, открыты порты или нет
Редактировать: как уже упоминалось flokra, nmap - это больше, чем просто ping-for-ports-thingy. Это лучший друг аудиторов и хакеров безопасности, и он предлагает множество интересных вариантов. Проверьте документ на все возможные флаги.
источник
-PN
чтобы пропустить обнаружение хоста, которое обычно делает nmap перед тестированием данного порта.nmap windows
), НО он не работает через VPN. Похоже, что PaPing не может сканировать диапазон адресов. Ниже я разместил скрипт Python, который будет работать через VPN для сканирования диапазона портов по диапазону адресов.brew install nmap
или MacPorts.Откройте сеанс telnet для определенного порта, например:
Чтобы закрыть сеанс, нажмите Ctrl+ ].
источник
netcat
работает также отлично и менее многословно.netcat
теперь встроенный MacOS HighSierra, в котором можно установить telnet из HomeBrewbrew install telnet
источник
time
как в»,time nc -vz www.example.com 80
и вы будете иметь вид RTT тоже.Если у вас установлена Windows с powershell v4 или новее, вы можете использовать модуль powershell test-netconnection:
Пример: Test-NetConnection example.com -port 80
Этот командлет также имеет псевдоним
tnc
. Напримерtnc example.com -port 80
источник
Вы можете использовать PaPing:
http://code.google.com/p/paping
источник
-c *
для постоянного papinging (?).Нет, вы не можете, потому что
ping
использует протокол ICMP , который даже не имеет понятия портов.источник
Попробуйте
curl
команду, например:Например:
Приведенная выше команда вернет Fail при ненулевых кодах выхода. В некоторых особых случаях, таких как пустой или неправильно сформированный ответ (см.
man curl
), Вы можете обрабатывать определенные коды выхода как успешные, поэтому просмотрите этот пост для более подробного объяснения.источник
curl
он присутствует по умолчанию в CentOS, поэтому мне не нужно ничего устанавливать.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."
Я нашел более простое решение с помощью PsPing:
Это часть Windows Sysinternals .
источник
В Linux вы можете использовать hping, но он использует TCP, а не ICMP.
источник
flags=SA
(т.е. SYN ACK), а если он закрыт, вы получаетеflags=SR
(т.е. SYN RST). Обратите внимание, что вам, вероятно, здесь не нужен-V
флаг, но вам нужен sudo / root для запуска hping.ping
и пингует до остановки.Ping очень специфичен, но если вы хотите проверить, открыт порт или нет и работает ли Windows-бокс, то PortQry - ваш друг.
Я использовал его только для тестирования контроллеров домена на наличие проблем с подключением, но это помогло, так что должно сработать для вас.
источник
Вот быстрое и грязное консольное приложение .NET:
источник
Нет.
Там нет никакой гарантии, что служба, работающая на порту, понимает пинг. Это также открывает вопрос о том, какой «вкус» порта вы хотите пинговать, TCP или UDP? Поскольку пинг «протокол» не использует ни один (пинг реализован с использованием ICMP ), это не имеет большого смысла.
источник
Я совершенно уверен, что Nagios check_tcp делает то, что вы хотите. Их можно найти здесь, и хотя они предназначены для использования в контексте Nagios, все они являются автономными программами.
источник
Это единственное решение, которое работает для VPN с клиентским компьютером под управлением Windows Vista или Windows 7 , поскольку другие перечисленные ответы просто не работают. Этот ответ был ранее удален и не должен был быть, поскольку это единственное решение для реального общего случая. Поскольку для удаления нет апелляции, я делаю это повторно, чтобы избавить других от разочарования, связанного с попыткой использовать другие ответы.
В приведенном ниже примере показано, какие IP-адреса в VPN с открытым VNC / портом 5900 с клиентом, работающим в Windows 7.
Короткий скрипт Python (v2.6.6) для сканирования заданного списка IP-адресов и портов:
Результаты выглядели так:
Четыре переменные в верхней части необходимо изменить, чтобы они соответствовали требуемому времени ожидания, сети, хостам и портам. 5,0 секунд на моем VPN было достаточно для правильной работы, меньшее не всегда давало точные результаты. В моей локальной сети 0,5 было более чем достаточно.
источник
Для этого есть облегченный инструмент, который называется tcping: http://www.linuxco.de/tcping/tcping.html.
источник
В оболочке Bash вы можете использовать файл псевдоустройства TCP , например:
Вот версия, реализующая время ожидания в 1 секунду:
источник
Если вы работаете с операционной системой * nix, попробуйте установить и использовать «zenmap», это графический интерфейс для nmap и несколько полезных профилей сканирования, которые очень помогут новому пользователю.
источник