Ping 特定端口

Dav*_*vie 769 ping

这里只是一个快速的健全性检查。

你能ping通机器的特定端口吗,如果可以,你能提供一个例子吗?

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

sfu*_*ger 807

您无法 ping 端口,因为 Ping 使用的是没有端口概念的ICMP。端口属于传输层协议,如 TCP 和 UDP。但是,您可以使用nmap查看端口是否打开

nmap -p 80 example.com
Run Code Online (Sandbox Code Playgroud)

编辑:正如 flokra 提到的,nmap 不仅仅是一个 ping-for-ports-thingy。它是安全审计员和黑客最好的朋友,并提供大量很酷的选项。检查文档以获取所有可能的标志。

  • 为了给一些人省去一些麻烦:nmap /can/ 安装在来自 [link](http://nmap.org/book/inst-windows.html)(或谷歌 `nmap windows`)的 windows 上,但它不起作用通过 VPN。PaPing 似乎无法扫描一系列地址。我在下面发布了 Python 脚本,它可以通过 VPN 扫描一系列地址上的一系列端口。 (30认同)
  • 对于其他人:Mac OS X 上不存在 nmap,您可以通过自制软件 `brew install nmap` 或 MacPorts 安装 nmap。 (23认同)
  • 您可能希望添加 `-PN` 以跳过 nmap 通常在测试给定端口之前执行的主机发现。 (18认同)
  • nping 比 nmap 更适合这个任务。nping 是 nmap 分布的一部分。 (18认同)
  • Mac OSX 具有“网络实用程序”,其中有一个端口扫描器选项卡 (8认同)
  • 有没有办法在 shell 中使用网络实用程序? (2认同)

小智 215

打开到特定端口的 telnet 会话,例如:

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)

要关闭您的会话,请点击Ctrl+ ]

  • `netcat` 也很好用,而且不那么冗长。 (26认同)
  • netcat 也适用于 UDP (nc -u) (6认同)
  • 如果端口是 TCP 端口,Telnet 对此很有效。 (3认同)
  • 对于 Mac 用户 - ```netcat``` 现在内置于 MacOS HighSierra,其中 telnet 可以从 HomeBrew 安装 ```brew install telnet``` (2认同)

Kje*_*jær 138

如果您使用 powershell v4 或更高版本进行 Windows 安装,则可以使用 test-netconnection powershell 模块:

Test-NetConnection <host> -port <port>
Run Code Online (Sandbox Code Playgroud)

示例:Test-NetConnection example.com -port 80

这个 cmdlet 也有别名tnc。例如tnc example.com -port 80


Rah*_*til 115

$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
Run Code Online (Sandbox Code Playgroud)

  • 与“time”一起使用,就像在“time nc -vz www.example.com 80”中一样,您也将拥有某种 RTT。 (10认同)
  • 无需任何安装即可在 Amazon EC2 实例上运行的唯一解决方案。 (6认同)

小智 82

您可以使用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
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 33

尝试curl命令,例如:

$ curl host:port
Run Code Online (Sandbox Code Playgroud)

例如:

$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
Run Code Online (Sandbox Code Playgroud)

上面的命令将在非零退出状态代码上返回失败。在某些特定情况下,例如空响应或格式错误的响应(请参阅 参考资料man curl),您可能希望成功处理特定的退出代码,因此请查看此帖子以获取更详细的说明。

  • 我喜欢这个是因为 CentOS 上默认存在 `curl`,所以我不需要安装任何东西。 (4认同)

小智 30

不,你不能,因为ping使用ICMP 协议,它甚至没有端口的概念。

  • 我很确定“ping”的使用是隐喻的。 (56认同)

Aya*_*ick 24

我使用 PsPing 找到了一个更简单的解决方案:

psping 192.168.2.2:5000
Run Code Online (Sandbox Code Playgroud)

它是Windows Sysinternals的一部分。

PsPing 实现 Ping 功能、TCP ping、延迟和带宽测量。

  • 此外,PsPing 来自 Microsoft SysInternal 团队,因此在与其他面向 Microsoft 的人员打交道时可能会被认为更合法一些。(并且具有比非常旧的 PortQry 更好的功能) (3认同)
  • PSPing 的优势是在使用自定义端口时提供延迟测量,这是 Test-NetConnection 无法做到的(它只报告 ICMP 响应时间)。 (2认同)

c4f*_*t0r 17

在 Linux 上,您可以使用hping,但它使用 TCP,而不是 ICMP。

hping example.com -S -V -p 80
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 11

Ping 非常具体,但如果您想检查端口是否打开,并且正在运行 Windows 机器,那么PortQry是您的朋友。

我只用它来测试域控制器的连接问题,但它对此很有用,所以应该对你有用。


Luk*_*ett 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

不。

无法保证在端口上运行的服务理解 ping。它还打开了您想要 ping 的端口的“风格”,TCP 或 UDP 的问题?由于 ping “协议”两者都不使用(ping 是使用ICMP实现的),因此没有多大意义。


Mar*_*bau 5

这是唯一适用于客户端计算机为 Windows Vista 或 Windows 7 的 VPN 的解决方案,因为其他列出的答案根本不起作用。这个答案以前被删除了,不应该被删除,因为这是现实世界中常见情况的唯一解决方案。由于没有可用于删除的上诉,我重新发布它是为了避免其他人在尝试使用其他答案时感到沮丧。

下面的示例查找在 Windows 7 上运行的客户端打开了 VNC/端口 5900 的 VPN 上的哪些 IP。

一个简短的 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."
Run Code Online (Sandbox Code Playgroud)

结果如下:

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.
Run Code Online (Sandbox Code Playgroud)

需要更改顶部的四个变量以适合所需的任何超时、网络、主机和端口。在我的 VPN 上 5.0 秒似乎足以始终如一地正常工作,更少没有(总是)给出准确的结果。在我的本地网络上,0.5 已经足够了。

  • 在 Win 7 XP Pro 客户端/Win Server 2008 R2 上完美运行以诊断关闭的端口。(我不得不使用 30 秒超时阈值,但这可能是特定服务器环境的问题,而不是此代码的问题) (2认同)