测试端口是否开启及端口连通性

868 阅读2分钟

一、lsof

tcp 或 udp 均适用

lsof -i:8080

二、netstat

1. 测试tcp端口

netstat -plant|grep 8080

2. 测试udp端口

netstat -planu|grep 3478

三、nc

1. 测试tcp端口

nc -vz 127.0.0.1 8080

2. 测试udp端口

nc -vzu 127.0.0.1 3478

注意:
nc探测一个链路不通的端口,即使端口未开启,但是nc工具仍然认为端口开启,实际上我们无法确认对端是否开启,这就是这个nc工具的小bug。
nc+ping+traceroute组合使用来判断UDP监听端口
经过上面的一系列实验,发现使用nc工具探测udp监听端口,必须确保两个设备链路是否通畅,但是ping 包均是 ICMP 报文,即使链路正常,还是不能保证百分之百保证UDP报文一定能到达对端,因为还有极少数的路由器或者一些防火墙设备可能会丢去一些端口较大的 UDP 报文。因此,此时还要借助 traceroute 判断 UDP 包是否到达了远端主机。

端口扫描:

nc -v -w 2 192.168.10.11 -z 21-24
nc: connect to 192.168.10.11 port 21 (tcp) failed: Connection refused
Connection to 192.168.10.11 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.10.11 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.10.11 port 24 (tcp) failed: Connection refused 

监听端口:

1.临时监听TCP端口

nc -l port  

2.永久监听TCP端口

nc -lk port 

3.临时监听UDP

nc -lu port  

4.永久监听UDP

nc -luk port

举个例子
服务器a上创建监听tcp端口(192.168.2.1)

nc -l 8080  

服务器b上测试端口是否畅通(192.168.2.2)

nc -vz 192.168.2.1 8080

或者

curl 192.168.2.1:8080  

或者

wget 192.168.2.1:8080    

注意这些命令需要安装才能使用

四、telnet

仅适用于tcp

telnet host port

指定源地址

telnet命令默认会使用系统默认的IP地址作为源IP地址来连接目标主机。如果您想要指定源IP地址来进行telnet连接,可以使用telnet命令的"-b"选项。

以下是使用telnet命令指定源IP地址的语法:

telnet -b <source_ip> <destination_ip> [port]

其中,"-b"选项用于指定源IP地址,"<source_ip>"是源IP地址,"<destination_ip>"是目标IP地址,"[port]"是可选的目标端口号。

例如,如果您想要使用192.168.1.100作为源IP地址来连接192.168.2.100上的SSH服务器(端口号为22),可以使用以下命令:

telnet -b 192.168.1.100 192.168.2.100 22

这将使用192.168.1.100作为源IP地址来连接192.168.2.100上的SSH服务器。

需要注意的是,并非所有的telnet客户端都支持指定源IP地址。如果您使用的telnet客户端不支持该功能,您可以考虑使用其他工具来指定源IP地址,例如nc或socat等工具。