Linux / UNIX 找出哪个程序 / 服务正在监听特定的 TCP 端口
问:如何找出哪个服务正在侦听特定端口?如何找出哪个程序正在侦听特定 TCP 端口?
A.在 Linux 和 UNIX 下,您可以使用以下任一命令来获取特定 TCP 端口上的列表:
=> lsof:列出打开的文件(包括端口)。
=> netstat:netstat 命令以符号方式显示各种与网络相关的数据和信息的内容。
lsof 命令示例
键入以下命令来查看 IPv4 端口,输入:
# lsof -Pnl +M -i4
键入以下命令来查看 IPv6 列表端口,输入:
# lsof -Pnl +M -i6
示例输出:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME gweather- 6591 1000 17u IPv4 106812 TCP 192.168.1.100:57179->140.90.128.70:80 (ESTABLISHED) firefox-b 6613 1000 29u IPv4 106268 TCP 127.0.0.1:60439->127.0.0.1:3128 (ESTABLISHED) firefox-b 6613 1000 31u IPv4 106321 TCP 127.0.0.1:60440->127.0.0.1:3128 (ESTABLISHED) firefox-b 6613 1000 44u IPv4 106325 TCP 127.0.0.1:60441->127.0.0.1:3128 (ESTABLISHED) firefox-b 6613 1000 50u IPv4 106201 TCP 127.0.0.1:60437->127.0.0.1:3128 (ESTABLISHED) deluge 6908 1000 8u IPv4 23179 TCP *:6881 (LISTEN) deluge 6908 1000 30u IPv4 23185 UDP *:6881 deluge 6908 1000 45u IPv4 106740 TCP 192.168.1.100:50584->217.169.223.161:38406 (SYN_SENT) deluge 6908 1000 57u IPv4 70529 TCP 192.168.1.100:57325->24.67.82.222:21250 (ESTABLISHED) deluge 6908 1000 58u IPv4 106105 TCP 192.168.1.100:38073->24.16.233.1:48479 (ESTABLISHED) .......... ...... ssh 6917 1000 3u IPv4 23430 TCP 10.1.11.3:42658->10.10.29.66:22 (ESTABLISHED)
第一列COMMAND – 提供有关程序名称的信息。请参阅输出标题了解详细信息。例如,gweather* 命令从美国国家气象局 (NWS) 服务器 (140.90.128.70) 获取天气报告天气信息,包括交互式天气信息网络 (IWIN) 和其他天气服务。
其中,
- -P:此选项禁止将端口号转换为网络文件的端口名。禁止转换
可能会使 lsof 运行得更快一些。当端口名查找不正常时,它也很有用。 - -n:此选项禁止将网络号转换为网络文件的主机名。禁止转换可能会使 lsof 运行得更快。当主机名查找无法正常工作时,它也很有用。
- -l:此选项禁止将用户 ID 号转换为登录名。当登录名查找工作不正常或缓慢时,它也很有用。
- +M:启用本地 TCP 和 UDP 端口的端口映射器注册报告。
- -i4:仅列出 IPv4
- -i6:仅列出 IPv6
netstat 命令示例
输入以下命令:
# netstat -tulpn
或
# netstat -npl
输出:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:6881 0.0.0.0:* LISTEN 6908/python tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5562/cupsd tcp 0 0 127.0.0.1:3128 0.0.0.0:* LISTEN 6278/(squid) tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5854/exim4 udp 0 0 0.0.0.0:32769 0.0.0.0:* 6278/(squid) udp 0 0 0.0.0.0:3130 0.0.0.0:* 6278/(squid) udp 0 0 0.0.0.0:68 0.0.0.0:* 4583/dhclient3 udp 0 0 0.0.0.0:6881 0.0.0.0:* 6908/python
最后一列PID/程序名称提供有关程序名称和端口的信息。
其中,
- -t:TCP 端口
- -u:UDP 端口
- -l:仅显示监听套接字。
- -p:显示每个套接字/端口所属程序的 PID 和名称
- -n:不进行 DNS 查找(加快操作速度)
/etc/services 文件
/etc/services 是一个纯 ASCII 文件,它提供了互联网服务的友好文本名称与其底层分配的端口号和协议类型之间的映射。每个网络程序都应该查看此文件以获取其服务的端口号(和协议)。您可以借助 cat 或 less 命令查看此文件:
$ cat /etc/services
$ grep 110 /etc/services
$ less /etc/services
进一步阅读:
- 手册页 – lsof、nmap、services、netstat