在使用 docker 映射端口时,宿主机已经使用 ufw 命令关闭了映射的端口,但是,外部还是能够访问宿主机的端口来访问 docker 容器,想通过命令行测试端口是否真的能够联通,本篇介绍命令行测试某台 linux 主机的某个端口是否打开。

telnet

telnet 命令最初是用于远程登陆服务器的,但因为数据是明文传送的,因此现在都采用 SSH,但用 telnet 测试远程端口还是很方便的。

服务器端 telnet 默认端口是 23,SSH 默认端口是 22. 这些都可以根据需要更改,建议改端口号范围是 [1024, 65535] 之间。Linux 端口号的范围从 0 到 65535。但是,位于 0 到 1023 这个较低范围内的端口号通常由操作系统使用。

安装 telnet

1
2
sudo apt update
sudo apt install telnet

使用

使用方法:

1
2
Usage: telnet [-4] [-6] [-8] [-E] [-L] [-a] [-d] [-e char] [-l user]
[-n tracefile] [ -b addr ] [-r] [host-name [port]]

例子:
查看 IP:192.168.1.11 的 8888 端口是否打开,命令:

1
2
3
4
5
6
7
8
9
telnet 192.168.1.11 8888
# 如果出现下面的内容,证明端口打开了
Trying 192.168.1.11...
Connected to 192.168.1.11.
Escape character is '^]'.
# 使用快捷键:ctrl + ],可以进入 telnet 提示符界面
# 然后使用 quit 退出 telnet

# 如果没有出现上面的 Connected 内容,则证明端口没有打开

tcping

tcping 类似于 ping,但与 ping 不同的是 ping 命令(基于 ICMP 协议,属于 ip 层协议)发送的是 icmp 包,通信不需要端口,如果服务器禁用 ping,将无法进行判断。使用 tcping 可以探测服务器的某个端口是否可以访问,因为其基于 TCP 协议,属于传输层。但 tcping 非自带命令,安装不能简单的使用 apt install 来进行。

tcping 的安装与使用请查看我的另一篇博文:ubuntu 安装 tcping

docker 映射端口管理

如果使用如下命令映射,则无法使用 ufw 管理映射的端口:

1
docker run -itd --name ubuntu-test -p 8888:80 ubuntu:latest bash

则宿主机的端口 8888 无法使用 ufw 管理。想要 8888 端口不让外部服务器连接,可以尝试如下命令:

1
docker run -itd --name ubuntu-test -p 127.0.0.1:8888:80 ubuntu:latest bash

ufw 无法管理 docker 映射端口的原因是 docker 绕过防火墙的原理是修改了 iptables,那不让它修改即可,方法可参见 linux防火墙firewall无法禁用docker端口映射问题

参考文献

  1. linux 检测远程端口是否打开