我没有联网,并且我有以下与Linux ping命令有关的问题。

我只能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地址:端口,例如:onofri.org:80?

如果我尝试这是行不通的:

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


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

评论

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

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

@FrankThomas HTTP \ 1.1?真的吗?

@Navin也许是HTTP / 1.1 ...

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

#1 楼

您可以使用Paping(跨平台TCP端口测试)来模拟ping(端口ping)的功能(请参见Github,因为code.google.com已弃用)

paping -p 80 google.com


评论


对该程序的功能进行一些解释将很有帮助。

– David Schwartz
15年6月15日在11:04

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

–马克
16-3-7的3:28

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

–沙燕
19年8月14日在19:18



#2 楼

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

因此,您不能ping端口。您所能做的就是使用nmap之类的端口扫描器。

nmap -p 80 onofri.org


您也可以使用telnet onofri.org 80,如其他回答之一所示(这会出错)如果端口已关闭或已过滤)。

评论


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

–杰森C
2014年6月16日18:42



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

–奥利维尔·杜拉克(Olivier Dulac)
14年6月17日,11:45

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

– YLearn
2014年6月17日18:32

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

– YLearn
2014年6月17日19:17

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

– Cruncher
14年6月19日在16:12

#3 楼

我使用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


评论


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

–张力
2014年6月17日下午6:30

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

–布兰登
14年6月17日在13:17

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

– Cruncher
2014年6月19日20:00

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

–轨道轻赛
2014年6月22日11:30



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

–大卫
14年6月23日在8:06

#4 楼

您可以使用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与tcp的-T标志和-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年6月19日下午5:20

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

–假名
2014年6月19日19:38



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

–假名
2014年6月19日19:45在

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

– barlop
2014年6月19日20:00

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

–假名
14年6月20日在21:36

#5 楼

是的,使用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(很可能是ping)一样。 suid)。

评论


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

–马克
16 Mar 7 '16 at 3:23

我无法在ubuntu中安装hping。找不到软件包。但是我找到了hping3。与hping3相同吗? @ d33tah

–沙燕
19年8月14日在18:47



好的,我尝试了hping3并ping通了所有端口。.不管关闭还是打开..我怎么知道端口是关闭还是打开?

–沙燕
19年8月14日在19:08

#6 楼

您也可以使用npingnmap的一部分):

$ 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


评论


nping --tcp -p 80本地主机

– K-Gun
15年1月29日在15:22

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

–沙燕
19年8月14日在18:31

#7 楼

您可以在Python外壳中使用它作为一个不太短的衬里:

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


#8 楼

仅供参考,想分享Vivek Gite的帖子:https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# comment-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容器时很有用。

评论


查看输出-仅检查返回码$?会有所帮助。它也挂在关闭的端口上,可能在任何地方都可以配置一些超时...

–vp_arth
18-10-28在7:27

此解决方案看起来很简洁,但是关闭端口后,echo> / dev / tcp / {hostname} / {portnumber}仍未完成。即使端口是打开的,echo> / dev / tcp / {hostname} / {portnumber}也不显示任何内容,并且我可以在浏览器中看到它。

–miguelmorin
19年1月7日在17:35

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

–雅克
19年1月8日在12:02



#9 楼

使用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 /

#10 楼

我在这里添加了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


评论


您可以只在另一个答案中使用nping,而无需重复nmap版本标头即可产生更好的输出。

– Arnie97
20年8月6日在8:05

#11 楼

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

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

nmap -v -p 80 onofri.org


评论


不确定您使用的nmap版本。在我的系统上,它要求-v和-p像'nmap -v -p 80 onofri.org'一样分开。这是因为-v和-vv的含义不同,-v将更多v用作参数。

–假名
2014年6月20日下午0:31