And*_*ili 232 networking linux ping
我不喜欢网络,我有以下与 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
Run Code Online (Sandbox Code Playgroud)
或者我也可以 ping 一个address:port,例如:onofri.org:80?
如果我尝试这个它不起作用:
miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80
Run Code Online (Sandbox Code Playgroud)
是否可以 ping 之类的地址:端口?如果可能,为什么我尝试的方法不起作用?
Ben*_*ebe 322
端口是UDP和TCP的概念。Ping 消息在技术上称为ICMP Echo Request和ICMP Echo Reply,它们是ICMP 的一部分。ICMP、TCP 和 UDP 是“兄弟”;它们不是基于彼此,而是运行在 IP 之上的三个独立协议。
因此你不能ping一个端口。你可以做的是使用像nmap.
nmap -p 80 onofri.org
Run Code Online (Sandbox Code Playgroud)
您也可以使用telnet onofri.org 80其他答案之一中的建议(如果端口已关闭或过滤,则会出现错误)。
Fra*_*mas 92
我使用Telnet,因为它内置于许多平台中,无需额外下载。
只需使用 telnet 命令连接到您要测试的端口即可。如果您收到以下消息或来自服务本身的消息,则该端口处于活动状态。
Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)
如果您知道要连接的服务的命令序列,则可以键入命令(例如HTTP/FTP GET)并观察终端中的响应和输出。这对于测试服务本身非常有用,因为它会向您显示发送到客户端的错误信息,例如 HTTP 500 错误。
如果您收到连接被拒绝的消息,则端口已关闭。
Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)
d33*_*tah 51
是的,使用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
Run Code Online (Sandbox Code Playgroud)
请注意,它需要 root 权限(或 SELinux 功能)来创建原始 IP 数据包,就像 ping(这很可能是您系统上的 suid)。
Fal*_*mes 50
您可以使用 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
Run Code Online (Sandbox Code Playgroud)
此外,您可以将 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]
Run Code Online (Sandbox Code Playgroud)
小智 25
您可以使用Paping,一个跨平台的 TCP 端口测试,模拟 ping(端口 ping)的功能
(另请参阅Github,因为 code.google.com 已折旧)
paping -p 80 google.com
Run Code Online (Sandbox Code Playgroud)
nyu*_*a7h 21
您还可以使用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
Run Code Online (Sandbox Code Playgroud)
AXE*_*abs 10
您可以在 shell 中使用 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
Run Code Online (Sandbox Code Playgroud)
小智 8
仅供参考,想分享一个 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"
Run Code Online (Sandbox Code Playgroud)
或者一个超级简单的版本:只需查看以下命令模式的输出:
echo >/dev/{tcp|udp}/{host}/{port}
Run Code Online (Sandbox Code Playgroud)
在使用随机 docker 容器时很有用。