ping 命令能够帮助我们测试两台主机之间的网络是否畅通。但是,当目标主机的 ICMP 协议端口都关闭的时候,无法通过 ping 命令达到目标。一台主机只要是需要连接服务,那么它一定会开启 tcp 协议的某个端口,因此,我们可以通过基于 tcp 协议的 ping 命令 tcping 来获知两台主机是否网络联通。本篇以 Ubuntu 18.04 为例介绍如何安装 TCPing,以及如何使用它探测网络是否联通。

安装 TCPing

1
2
3
4
5
sudo apt update
# centos 可以使用 yum 包管理工具安装
sudo apt install tcptraceroute wget bc
sudo wget http://www.vdberg.org/\~richard/tcpping -O /usr/bin/tcping
sudo chmod +x /usr/bin/tcping

使用 TCPing

使用方法:

1
2
3
4
5
6
7
8
Usage: tcping [-d] [-c] [-C] [-w sec] [-r secs] [-q num] [-x count] ipaddress [port]
-d print timestamp before every result
-c print a columned result line
-C print in the same format as fping's -C option
-w wait time in seconds (defaults to 3)
-r repeat every n seconds (defaults to 1)
-q query numbers (defaults to 1)
-x repeat n times (defaults to unlimited)

例子:

1
2
3
4
5
6
7
8
# 测试是否可以连接到百度网站的 443 端口
tcping www.baidu.com 443
tcping www.wshifen.com 443
# 如果是 80 端口,可以不写端口,默认端口号是 80,下面 2 条命令等价
tcping www.baidu.com 80
tcping www.baidu.com
# 除了使用域名,也可以使用 IP 地址
tcping 45.113.192.102

如果网络端口是通的,将会打印链接时间,如下面示例:

1
2
3
seq 0: tcp response from 45.113.192.102 [open]  1.918 ms
seq 1: tcp response from 45.113.192.101 [open] 1.659 ms
seq 2: tcp response from 45.113.192.102 [open] 1.651 ms

如果网络端口不通,则会打印下面示例:

1
2
3
seq 0: no response (timeout)
seq 1: no response (timeout)
seq 2: no response (timeout)

更多关于端口探测方法请查看我的另一篇博文:测试 Linux 某个端口是否打开

参考文献

  1. Debian/Ubuntu安装TCP测试工具TCPing