it-swarm.cn

ping特定端口

这里只是一个快速的理智检查。

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

我正在寻找ping ip address portNum

701
Davie

您无法ping端口,因为ping使用 [〜#〜] icmp [〜#〜] ,它没有端口的概念。端口属于 传输层协议 ,例如TCP和UDP。但是,您可以使用 nmap 来查看端口是否打开

nmap -p 80 example.com

编辑:正如flokra所提到的,nmap不仅仅是ping-for-ports-thingy。它是安全审核员和黑客最好的朋友,并提供许多不错的选择。检查文档中所有可能的标志。

741
sfussenegger

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

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

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

197
Pipo
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
106
Rahul Patil

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

Test-NetConnection <Host> -port <port>

示例:Test-NetConnection example.com-端口80

此cmdlet也具有别名tnc。例如tnc example.com -port 80

102
Kjetil Limkjær

您可以使用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
80
CodhubIV

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

26
Martin B

尝试curl命令,例如:

$ curl Host:port

例如:

$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.

上面的命令将在非零退出状态代码上返回Fail。在某些特定情况下,例如响应为空或格式不正确(请参见man curl),您可能希望成功处理特定的退出代码,因此请检查 post 以获取更多详细说明。

26
kenorb

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

psping 192.168.2.2:5000

它是 Windows Sysinternals 的一部分。

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

22
Ayan Mullick

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

hping example.com -S -V -p 80
15
c4f4t0r

Ping非常具体,但是如果您要检查端口是否已打开并且正在运行Windows框,则 PortQry 是您的朋友。

我仅将其用于测试域控制器的连接问题,但是它可以解决问题,因此应该为您服务。

11
Rob

这是一个快速又肮脏的.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();
        }
    }
8
Luke Puplett

没有。

不能保证端口上运行的服务可以ping通。它还打开了您要ping端口的“味道”的问题,TCP或UDP?因为ping“协议”不使用(ping是使用 [〜 #〜] icmp [〜#〜] ),这没有什么意义。

5
unwind

这是仅适用于客户端计算机为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."

结果如下:

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绰绰有余。

4
Mark Ribau

我非常确定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
4
fvu

在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
2
kenorb

有一个名为tcping的lightweigth工具: http://www.linuxco.de/tcping/tcping.html

2
Craig

我在Google上为“ ping一个特定端口”感到很幸运: http://philwilks.blogspot.com/2008/01/ping-specific-port.html ,所以不,您不能ping特定端口

您可以使用nmap:nmap -p <port> <Host>

0
knittl

如果您正在运行* nix操作系统,请尝试安装和使用“ zenmap”,它是nmap的GUI,并且具有几个有用的扫描配置文件,这对新用户很有帮助。

0
user604952