您可以ping机器的特定端口吗?如果可以,可以提供一个示例吗?
我正在寻找类似的东西
ping ip address portNum
。#1 楼
您无法ping端口,因为Ping使用的是没有端口概念的ICMP。端口属于传输层协议,例如TCP和UDP。但是,您可以使用nmap来查看端口是否打开nmap -p 80 example.com
编辑:
正如flokra所提到的,nmap不仅仅是ping -港口东西。它是安全审核员和黑客最好的朋友,并提供许多不错的选择。检查文档中所有可能的标志。
评论
您可能需要添加-PN以跳过nmap在测试给定端口之前通常执行的主机发现。
–flokra
09-10-8在10:06
为了省去一些麻烦:nmap /可以从链接(或google nmap Windows)安装在Windows上,但是它不能通过VPN使用。 PaPing似乎无法扫描一定范围的地址。我在下面发布了Python脚本,该脚本将通过VPN来扫描一系列地址上的一系列端口。
–马克·里鲍(Mark Ribau)
2011年9月8日7:19
对于其他:nmap在Mac OS X上不存在,您可以通过自制的brew install nmap或MacPorts安装nmap。
–生活的高速路
2012年3月27日15:58
nmap比nmap更适合此任务。 nping是nmap分布的一部分。
– CMCDragonkai
2014年6月16日在8:39
Mac OSX的“网络实用程序”具有端口扫描程序选项卡
–假名
15年7月27日在20:53
#2 楼
打开到特定端口的telnet会话,例如:# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
要关闭会话,请按Ctrl +]。
评论
netcat的功能也很棒,而且不太冗长。
–彼得
2011年9月9日20:17在
如果端口是TCP端口,则Telnet可以很好地工作。
–猎鹰Momot
13年2月14日在22:29
netcat也适用于UDP(nc -u)
–茨维托米尔·迪米特洛夫(Tsvetomir Dimitrov)
13年4月21日在7:35
对于Mac用户-netcat现在内置在MacOS HighSierra中,可以从HomeBrew brew install telnet安装telnet。
– sandiejat
18年8月3日在22:12
#3 楼
如果您正在使用Powershell v4或更高版本的Windows安装,则可以使用test-netconnection powershell模块:Test-NetConnection <host> -port <port>
示例:
Test-NetConnection example.com -port 80
此cmdlet也具有别名
tnc
。例如tnc example.com -port 80
#4 楼
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
评论
像在时间nc -vz www.example.com 80中那样使用时间,您也将获得某种RTT。
– xebeche
2014年2月21日在8:58
无需任何安装即可在Amazon EC2实例上运行的唯一解决方案。
–马萨多
16-3-3在15:39
-z是什么? rhel7上的ncat 6.40提供了一个未知选项
–塔加尔
17年7月25日在4:59
@Tagar根据Ubuntu版本中的帮助,-z是Zero-I / O模式,用于扫描。
– Ben Mordecai
17年8月1日在12:01
哪个软件包提供此命令?我找不到名为“ nc”的软件包。
–法比安·罗林(FabianRöling)
10月20日19:03
#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
评论
或者,您可以使用哭泣来代替敲击,后者已经存在了很长的时间,并且支持对某些服务和端口进行ping操作。
–布赖恩·克莱尔(Brian Cryer)
2010-09-10 9:47
可以用来ping任何端口还是只能ping 80?
–卢克·普普利特(Luke Puplett)
2012年7月9日在16:28
@LukePuplett仅在示例中更改数字80。通过键入paping.exe <主机名/ IP> -p <端口号> -c <尝试次数>来运行它。
–大卫·科斯塔(David Costa)
2012年7月9日在18:39
这很好。使用-c *进行恒定的变通(?)。
–user2924019
17年4月18日在9:47
#6 楼
请尝试curl
命令,例如:$ curl host:port
例如:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
以上命令将在非零退出状态代码。在某些特定情况下,例如响应为空或格式错误(请参阅
man curl
),您可能希望成功处理特定的退出代码,因此请查看此帖子以获取更详细的说明。评论
我之所以这样,是因为CentOS上默认存在curl,所以我不需要安装任何东西。
–bdemarest
16年1月12日在17:34
curl在Raspberry Pi(Raspian发行版)上工作
– John M
16年7月25日在17:41
到目前为止,这是最优雅,通用的解决方案。我对其进行了一些微调,以使其更简洁:IP =“
– Lefty G Balogh
17年4月28日在14:36
#7 楼
不,您不能,因为ping
使用ICMP协议,该协议甚至没有端口的概念。评论
我很确定“ ping”的使用是隐喻的。
–卢克·普普利特(Luke Puplett)
2012年7月9日在16:26
#8 楼
我找到了使用PsPing的简单解决方案:psping 192.168.2.2:5000
它是Windows Sysinternals的一部分。 ,延迟和带宽测量。
评论
另外,PsPing来自Microsoft SysInternal团队,因此在与其他面向Microsoft的人员打交道时,PsPing可能会被认为更加合法。 (并且比旧的PortQry具有更好的功能)
–martyvis
18年4月30日在0:08
PSPing的优点是在使用自定义端口时提供延迟测量,这是Test-NetConnection无法完成的(它仅报告ICMP响应时间)。
–杰夫·迈尔斯(Jeff Miles)
19年1月4日在19:30
#9 楼
在Linux上,您可以使用hping,但它使用TCP,而不是ICMP。hping example.com -S -V -p 80
评论
hping(在我的ubuntu中为hping3)非常好。它像ping一样定期重复探测,并且与此处建议的许多工具不同。它还测试数据包是否通过以及端口是否打开。如果打开,则得到标志= SA(即,SYN ACK),如果关闭,则得到标志= SR(即,SYN RST)。请注意,您这里可能不需要-V标志,但是需要sudo / root才能运行hping。
–mc0e
17-2-7在4:19
优秀的!与许多其他答案不同,这报告了RTT延迟,例如ping和ping直到停止。
–爱德华·安德森(Edward Anderson)
18年6月4日在19:46
#10 楼
Ping非常具体,但是如果您要检查端口是否打开并且正在运行Windows,则PortQry是您的朋友。问题,但可以解决问题,因此应该为您服务。评论
PortQry最初是由MS Exchange团队于1999/2000年发布的,但是MS的最新版本似乎已通过取消查询远程端口的功能(健康和安全)而使它受阻。
–卢克·普普利特(Luke Puplett)
2012年7月9日在16:31
#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 楼
不能。不能保证端口上运行的服务可以ping通。它还提出了您要ping端口的“味道”(TCP或UDP)的问题。由于ping“协议”都不使用(ping是使用ICMP实现的),因此没有太大意义。
#13 楼
这是唯一适用于客户端计算机为Windows Vista或Windows 7的VPN的解决方案,因为其他列出的答案根本不起作用。该答案以前已删除,不应删除,因为这是现实世界中常见情况的唯一解决方案。由于无法进行删除,因此我将其重新发布以免其他人尝试使用其他答案时感到沮丧。下面的示例查找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.
需要更改顶部的四个变量,以适合任何超时,网络,主机和端口这是必需的。在我的VPN上停留5.0秒似乎足以始终如一地正常工作,更少的时间(始终)未给出准确的结果。在我的本地网络上,0.5绰绰有余。
评论
在Win 7 XP Pro客户端/ Win Server 2008 R2上可以完美地工作以诊断关闭的端口。 (我必须使用30秒的超时阈值,但这可能是特定服务器环境的问题,而不是此代码的问题)
–David Zemens
2015年9月4日在2:04
#14 楼
我很确定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
#15 楼
在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
#16 楼
有一个名为tcping的轻量级工具:http://www.linuxco.de/tcping/tcping.html#17 楼
如果您正在运行* nix操作系统,请尝试安装和使用“ zenmap”,它是nmap的GUI,并且具有几个有用的扫描配置文件,这对新用户很有帮助。评论
Zenmap也可用于Windows。
–尼克·杨(Nick Young)
16年1月12日在18:16
#18 楼
似乎CMCDragonkai关于nping的明智建议尚未得到适当回答。nping example.com --tcp-connect -p 80,443
评论
对于Windows,可以检查此问题