Linux/UNIX找出正在特定TCP端口上侦听的程序/服务
时间:2020-01-09 14:16:31 来源:igfitidea点击:
问题描述:如何确定哪个服务正在侦听特定端口?
如何找出在特定TCP端口上侦听的程序?
解决方法:在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文件,提供Internet服务的友好文本名称及其基础分配的端口号和协议类型之间的映射。
每个网络程序都应调查此文件以获取其服务的端口号(和协议)。
您可以在cat或less命令的帮助下查看此文件:
$ cat /etc/services $ grep 110 /etc/services $ less /etc/services