Просто быстрая проверка здесь.
Можете ли вы проверить связь с конкретным портом машины, и если да, то можете ли вы привести пример?
Я ищу что-то вроде ping ip address portNum
.
Вы не можете пинговать порты, так как Ping использует ICMP который не имеет понятия портов. Порты относятся к протоколы транспортного уровня как TCP и UDP. Однако вы можете использовать Nmap чтобы узнать, открыты ли порты или нет
nmap -p 80 example.com
Изменить: Как уже упоминалось, Nmap - это больше, чем просто ping-for-ports. Это лучший друг аудиторов и хакеров, который предлагает массу интересных опций. Проверьте в документации все возможные флаги.
Откройте сеанс Telnet для определенного порта, например:
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
Чтобы закрыть сеанс, нажмите Ctrl+].
Если вы используете установку Windows с PowerShell v4 или новее, вы можете использовать модуль PowerShell test-netconnection:
Test-NetConnection <host> -port <port>
Пример: Test-NetConnection example.com -port 80
Этот командлет также имеет псевдоним tnc
. Например tnc example.com -port 80
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
Вы можете использовать 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
Пытаться curl
команда, например:
$ curl host:port
Например:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
Вышеуказанная команда вернет Потерпеть поражение по ненулевым кодам статуса выхода. В некоторых частных случаях, например, пустой или искаженный ответ (см. man curl
), вы можете обработать определенные коды выхода как успешные, поэтому проверьте это Почта для более подробного объяснения.
Нет, ты не можешь, потому что ping
использует Протокол ICMP, который даже не имеет понятия портов.
Я нашел более простое решение с помощью PsPing:
psping 192.168.2.2:5000
Это часть Windows Sysinternals.
PsPing реализует функции Ping, TCP ping, измерение задержки и пропускной способности.
В Linux вы можете использовать hping но он использует TCP, а не ICMP.
hping example.com -S -V -p 80
Ping очень специфичен, но если вы хотите проверить, открыт ли порт или нет, и работаете ли окно Windows, тогда PortQry твой друг.
Я использовал его только для тестирования контроллеров домена на предмет проблем с подключением, но он сработал, поэтому должен работать на вас.
Вот быстрое и грязное консольное приложение .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();
}
}
Это единственное решение, которое работает для 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 было более чем достаточно.
Нет.
Нет гарантии, что служба, запущенная на порту, понимает ping. Это также открывает вопрос о том, какой «вкус» порта вы хотите пинговать, TCP или UDP? Так как "протокол" ping не использует ни того, ни другого (ping реализуется с использованием 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
Для этого есть легкий инструмент под названием tcping: http://www.linuxco.de/tcping/tcping.html
В оболочке 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
Если вы используете операционную систему * nix, попробуйте установить и использовать «zenmap», это графический интерфейс для nmap и несколько полезных профилей сканирования, которые очень помогают новичкам.