一、基础概念
端口号是网络通信中的一个概念,用于标识一条通信链路的端点,主要用于标识不同的服务。
常用的端口号被固定分配给了一些常用的服务,如FTP、HTTP、SSH等;除此之外,还有大量的私有端口号未被固定分配,在使用时需要协商双方自定义。
在Linux中,所有的网络通信都是基于socket来实现的,而socket通信的两个端点都会被绑定到一个端口号以区别不同的通信链路。
二、查询端口号的方法
1. netstat命令
$ netstat -tlnp
该命令可以列出当前系统中所有的TCP和UDP端口号以及占用端口号的进程,其中:
- -t表示列出所有的TCP协议
- -u表示列出所有的UDP协议
- -l表示列出所有的正在监听的端口号
- -n表示不对端口号进行反向域名解析,提高命令执行速度
- -p表示显示占用端口号的进程PID及名称
示例:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp6 0 0 :::80 :::* LISTEN 5678/httpd udp 0 0 0.0.0.0:68 0.0.0.0:* 901/dhclient
可以看到当前系统中TCP协议下22端口号被sshd进程占用,TCP协议下80端口号被httpd进程占用,UDP协议下68端口号被dhclient进程占用。
2. lsof命令
$ sudo lsof -i :端口号
该命令可以查询指定端口号的占用进程,其中:
- -i表示查询网络相关文件
- -p表示查询指定进程PID相关的文件
示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN)
可以看到22端口号被sshd进程占用。
3. ss命令
$ ss -ltnp | grep :端口号
该命令可以列出指定端口号的占用进程,其中:
- -l表示只列出监听状态的端口号
- -t表示只列出TCP协议相关的端口号
- -n表示不对端口号进行反向域名解析,提高命令执行速度
- -p表示显示占用端口号的进程PID及名称
示例:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",1234,3))
可以看到22端口号被sshd进程占用。
三、防火墙对端口号的管理
在Linux中,防火墙是管理网络连接的基本手段之一。
1. 查询防火墙状态
$ sudo systemctl status firewalld
该命令可以查询当前防火墙的运行状态。
2. 查询防火墙规则
$ sudo firewall-cmd --list-all
该命令可以列出当前系统中所有的防火墙规则及其对应的端口号。
3. 打开/关闭端口号
$ sudo firewall-cmd --add-port=端口号/tcp --permanent $ sudo firewall-cmd --remove-port=端口号/tcp --permanent
该命令可以分别打开/关闭指定的端口号,并将规则永久写入防火墙配置中。
四、小结
本文介绍了在Linux系统中查询端口号的几种方法,包括使用netstat、lsof、ss命令查询,同时还介绍了防火墙对端口号的管理方法。