只需在此处进行快速检查即可。

您可以ping机器的特定端口吗?如果可以,可以提供一个示例吗?

我正在寻找类似的东西ping ip address portNum

评论

对于Windows,可以检查此问题

#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 =“ ”; PORT =“ <端口>”; curl -s“ $ IP:$ PORT”> / dev / null && echo“成功在端口$ PORT上连接到$ IP。” || echo“无法在端口$ PORT上连接到$ 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