netstat
$ netstat -tulpn
netstat命令各个参数说明如下:
- -t (tcp) 仅显示tcp相关选项
- -u (udp)仅显示udp相关选项
- -n 拒绝显示别名,能显示数字的全部转化为数字
- -l 仅列出在Listen(监听)的服务状态
- -p 显示建立相关链接的程序名
即可显示当前服务器上所有端口及进程服务,与grep结合可查看某个具体端口及服务情况。
$ netstat -nlp | grep LISTEN //查看当前所有监听端口
$ netstat -nlp | grep 80 //查看所有80端口使用情况
$ netstat -an | grep 3306 //查看所有3306端口使用情况
如果有些进程看不见,如只显示”-”,可以尝试用root用户执行该命令或加sudo。
ss
在有些Linux系统上(比如Ubuntu 20.04)netstat命令已经被废除了,取而代之的是ss命令,参数与netstat基本一致。
sudo ss -tulpn
lsof
如果想看某个端口的信息,使用lsof命令。lsof(list open files)是一个列出当前系统打开文件的工具。
lsof 查看端口占用语法格式:
lsof -i:端口号
如查看端口22,可以看到是sshd命令在使用。
$ sudo lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 2198 root 3u IPv4 13495112 0t0 TCP *:ssh (LISTEN)
sshd 2198 root 4u IPv6 13495114 0t0 TCP *:ssh (LISTEN)
nc
nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具。
监听TCP端口
nc可以作为server端启动一个tcp的监听。
在A机器上启动一个端口监听,比如 9999端口(注意:下面的-l 是小写的L,不是数字1)
$ nc -l 9999
然后测试B机器是否可以访问A机器启动的端口。
# telnet 192.168.1.120 9999
Trying 192.168.1.120...
Connected to 192.168.1.120.
Escape character is '^]'.
此时在B机器上敲的内容会显示在A机器上,如果要退出,按Ctrl+]退出连接到telnet命令行,然后输入quit回车退出。
监听UDP端口
如果要监听udp端口,可以用下面的命令:
$ nc -ul 9998
由于udp的端口无法在客户端使用telnet去测试,我们可以使用nc命令去扫描(telnet是运行于tcp协议的)。u表示udp端口,v表示可视化输出,z表示扫描时不发送数据。
$ nc -vuz 192.168.1.120 9998
Connection to 192.168.1.120 9998 port [udp/*] succeeded!
上面在B机器扫描此端口的时候,看到A机器下面出现一串XXXXX字符串。
$ nc -ul 9998
XXXXX