是否可以ping地址:端口?


212

我不喜欢联网,但是我有以下与Linux ping命令有关的问题。

我只能查一个地址吗?例如:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

或者我也可以ping一个address:port,例如:onofri.org : 80吗?

如果我尝试此操作将无法正常工作:

miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80

是否可以ping诸如address:port之类的东西?如果有可能,为什么我尝试的方法不起作用?


8
你想达到什么目的?验证正确的服务操作需要您实际查询服务并评估响应。例如,Web服务器可以接受您的连接,但由于配置错误而返回错误。
Daniel B

5
那就是我喜欢Telnet的一部分。您可以连接到Web服务器,然后键入GET /index.html HTTP\1.1并查看200响应(或错误代码)以及相应的标记。
2014年

7
@FrankThomas HTTP\1.1?真?
glglgl 2014年

5
@Navin Maybe HTTP/1.1...
glglgl 2014年

3
@glglgl; 什么?您从来没有将斜线放在哪里?但您是正确的,应该是一个斜线。
2014年

Answers:


20

您可以使用Paping(跨平台TCP端口测试)来模拟ping(端口ping)的功能

(另请参见Github,因为code.google.com已被贬值)

paping -p 80 google.com

8
对该程序的功能进行一些解释将很有帮助。
David Schwartz 2015年

16
对于像我一样找到此答案的任何人,只是发现paping不在任何存储库中,并且是甚至无法在ARM上编译的古老代码-向下滚动至“ hping”答案。当您需要测试端口时,它是ping的理想选择,并且可以在包括ARM在内的各种存储库(例如Ubuntu,Arch)中轻松访问。
2016年

如何安装paping?我已经访问了该仓库,但没有发布。啊,没关系。当时我无法访问Google代码。
Shayan

310

端口是UDPTCP的概念。Ping消息在技术上称为ICMP Echo RequestICMP Echo Reply,它们是ICMP的一部分。ICMP,TCP和UDP是“兄弟”。它们不是彼此基于的,而是在IP之上运行的三个独立的协议。

因此您不能ping使用端口。您可以做的是使用端口扫描仪,例如nmap

nmap -p 80 onofri.org

您也可以telnet onofri.org 80按照其他答案之一的建议使用,(如果关闭或过滤端口,则会出现错误)。


22
+1表示您理解正确。ICMP建立在IP之上,IP具有IP地址而不是端口的概念。TCP和UDP也在IP之上,并且这些协议添加了“端口”。就它们所采用的协议而言,ICMP,TCP和UDP都处于相同的“级别”。
詹森·C

14
+1。许多人认为,如果无法ping通某些内容,就无法连接到它...但是正如您所说的,ICMP与TCP和UDP不同:如果您打算提供有关TCP 80的网页,您只需要在防火墙上打开TCP 80,别无其他(例如,可以ping通到同一IP(...应该!))
Olivier Dulac

6
为了保持信息的准确性,ICMP不是像TCP或UDP这样的传输层协议。像许多协议一样,它并不完全适合于网络概念模型,但与IP一样,它通常被认为是网络/网络层协议。它有时也被称为L3.5协议。
YLearn

2
@BenjiWiebe,同意,但是为了准确起见,应该声明,这就是我添加它的原因。到目前为止,所有所说的就是ICMP,TCP和UDP相关。投票最多的评论甚至甚至说它们都在同一个“级别”上。虽然这对普通用户没有影响,但是有很多非普通用户访问此站点。
YLearn

4
@OlivierDulac我不知道您是否应该阻止它。我知道的大多数Web服务器都保持打开状态。ICMP使互联网无处不在。您为什么要让人们认为如果可以,他们就无法联系到您?
Cruncher 2014年

86

我使用Telnet,因为它内置于许多平台中,没有其他下载。

只需使用telnet命令连接到要测试的端口即可。如果您在下面收到消息,或者从服务本身收到消息,则说明该端口处于活动状态。

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

如果知道要连接的服务的命令顺序,则可以键入命令(例如HTTP / FTP GET),然后在终端中观察响应和输出。这对于测试服务本身非常有用,因为它将向您显示发送到客户端的错误信息,例如HTTP 500错误。

如果您收到一条拒绝连接的消息,则该端口已关闭。

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

8
同样,如果屏幕完全变黑,则表明您也已连接。
Tensigh 2014年

很好的建议。我曾经用它来测试在不是一个简单的Web浏览器时Web服务器是否启动。
布兰登2014年

@Brandon就像在开发机器中时一样^。^
Cruncher

浏览器中的开发人员工具要容易得多,因为它们仍将发送所有正确的HTTP请求标头,但您可以检查完整的HTTP响应。再说一次,如果您也想定制请求,那么telnet是可行的方法。
Lightness Races in Orbit 2014年

我认为所有答案都错过了最关键的信息。从技术上讲,是否可以按以下步骤“ ping”端口?您可以建立一个TCP / UDP连接,并计算建立该连接所花费的毫秒数。
大卫

47

是的,使用HPing可以做到这一点:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

请注意,它需要root特权(或SELinux功能)来创建原始IP数据包,就像ping(在系统中最有可能是suid)一样。


3
我希望这是“可接受的答案”。可以在多个存储库中轻松找到hping,这与paping不同,后者是无法在ARM上编译的古老的粗糙代码。另外,与NMAP不同,预连接返回的状态代码很容易从Shell脚本进行测试,因此它是您在其他情况下使用ping的完美替代。感谢您提供此答案,可惜我没有向下滚动到足够深的距离才能看到它,而不得不在另一个网站上找到它。
2016年

我无法在ubuntu中安装hping。。找不到软件包。。但是我已经找到了hping3。它与hping3吗?@ d33tah
傻眼了

好的,我尝试了hping3,并且对所有端口执行ping操作。关闭或打开都无所谓。如何确定端口是关闭还是打开?
Shayan

46

您可以使用netcat连接到特定端口,以查看是否获得连接。-v标志将增加详细程度,以显示端口是打开还是关闭。一旦建立连接,-z标志将导致netcat退出。然后您可以通过$使用退出代码?查看是否建立连接。

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

此外,您可以将mtr与-t标志一起用于tcp和-P标志来指定端口。这将执行类似于TCP上的跟踪路由的操作,而不仅仅是ICMP。但是,这可能会过大。

感叹 我必须进行编辑以添加此位,因为我们无法在注释中添加代码。Knoppix的netcat版本可能在做一些不同的事情,但这就是我从Linux Mint中学到的

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]

问题是,如果尝试尝试nc -z www.google.com 8000 ,可能会花费很长时间-再加上5秒钟。如果我这样做,-w 1则需要5秒钟。如果我这样做,-w 3则需要花费3倍的时间。.光标闪烁15次,即15秒。 -w 1应该是一秒钟,但是在cygwin上进行了测试。5秒。当端口上有服务器时,它是超级快,而当端口上没有服务器时,它会有点慢。
barlop 2014年

诅咒评论中没有换行符...这似乎是cygwin的错误。使用linux Mint进行的测试显示指定了几秒钟的延迟。进行测试:date; nc-zw5 www.google.com 8000; date
假名2014年

我还使用nmap请求对@BenjiWiebe进行了投票。nc更容易放入脚本中,但是在视觉上使用nmap更加容易。
假名2014年

在knoppix中尝试。nc -zv -w 1 www.google.com如何使其仅尝试一次?当我尝试时,-w 1有效,但是每秒重试一次,直到我执行Ctrl-C为止。
barlop 2014年

不确定“ nc -zv -w 1 www.google.com 80”的Knoppix版本在做什么。在我的系统上运行良好,只需查询一次并删除-z就可以了。同样,在没有指定端口号的情况下,我的失败表明没有指定端口。
假名2014年

18

您还可以使用nping(的一部分nmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds

6
nping --tcp -p 80 localhost
K-Gun 2015年

我测试了任何端口(未打开的端口),但我仍然始终收到两次握手……
Shayan

8

您可以在Python外壳程序中做到这一点,因为它不是那么短:

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSED; }
$ portping 8.8.8.8 54
CLOSED
$ portping 8.8.8.8 53
OPEN

7

仅供参考,想分享Vivek Gite的帖子:https : //www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/#评论-920398

他列出了各种方法,其中一些已经在此处发布。但是对我来说最令人惊讶的不过是bash

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

或超级简单的版本:仅查看以下命令模式的输出:

echo >/dev/{tcp|udp}/{host}/{port}

在使用随机Docker容器时很有用。


looking at the output-仅检查返回码$?会有所帮助。它也挂在关闭的端口上,可能在任何地方都可以配置一些超时...
vp_arth 18-10-28

该解决方案看起来很整洁,但是echo >/dev/tcp/{hostname}/{portnumber}在关闭端口后仍无法完成。并echo >/dev/tcp/{hostname}/{portnumber}说明不了什么,即使端口是开放的,我可以看到它在浏览器上。
miguelmorin

嗨,mmorin,您使用什么操作系统?在Ubuntu上,它的行为符合预期:如果关闭了端口,则显示Connection refused。否则,它将退出,不显示任何内容并echo $?显示退出代码1
Jacek

3

我在watch这里添加工具:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com   Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT     STATE  SERVICE
22/tcp open   ssh
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds

3

这很简单 nmap

例子:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

有关更多信息,请参见:

在命令行中输入以下内容: man nmap

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/


1

您是否正在尝试测试通信或从该节点上的端口80获得响应?PING将尝试通过与端口无关的ICMP与特定主机建立通信。

而是尝试http://nmap.org/检查端口信息并测试通信:

nmap -v -p 80 onofri.org

1
不确定您使用的nmap版本。在我的系统上,它要求-v和-p像'nmap -v -p 80 onofri.org'一样分开。这是因为-v和-vv的含义不同,-v将更多v用作参数。
假名2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.