我尝试过netstat
各种lsof
选项,但得到的都是垃圾结果。我感兴趣的是了解以下数据:
- 将套接字绑定到端口的应用程序 - 端口号
如果可能的话,我想从这个列表中排除 UNIX 套接字,但这不是很重要。
详细说明:通过“垃圾”,我的意思是既不打印netstat
也不lsof
打印端口号......我得到的内容看起来像:
rpc.statd 900 rpcuser 8u IPv4 16330 0t0 UDP *:51038
我希望端口号是 51038,但事实并非如此,我甚至无法弄清楚这些信息是什么。更糟糕的是,有时我通常期望端口号是字母而不是数字 - 这非常无用,因为我试图弄清楚哪个程序占用了我试图绑定/连接的端口(我怀疑这些字母是某个东西的别名,但说真的......谁需要它?)
答案1
这是一个netstat
改编。你可以用“udp”或“tcp”单独替换“tcp\|udp”:
netstat -nap \
| grep "^\(tcp\|udp\)" \
| grep -v "\.255:\|127\.0\.0\.1:" \
| sort -n -k 4,6 \
| sort -k 1 \
| sed -e 's/LISTEN//g' \
| tr -s " " "\t" | cut -f1,4,6- | column -t
它将输出所有 TCP 和 UDP 套接字。您可以grep
在排序之前添加另一行
| grep ":\*"
只获取监听套接字(在我的发行版中,它们与“:*”作为端口相关联),还有一行
| grep -v ":::"
不列出 IPv6 套接字。
最后一行压缩输出并在删除第 2、3 和 5 列后以最佳列格式重新扩展它;如果您没有column
安装,请将其删除。
在我的家庭开发系统(OpenSuSE 12.3,不是 Fedora)上,完整的脚本
#!/bin/sh
netstat -nap \
| grep "^\(tcp\|udp\)" \
| grep -v "\.255:\|127\.0\.0\.1:" \
| grep -v ":::" \
| grep ":\*" \
| sort -n -k 4,6 \
| sort -k 1 \
| sed -e 's/LISTEN//g' \
| tr -s " " "\t" | cut -f1,4,6- | tr "[:/]" " " | column -t
返回(我还有一个额外的地址重写行)协议、接口、端口号、进程 ID 和命令名称。
tcp ANY 111 649 rpcbind
tcp ANY 1190 1848 xinetd
tcp ANY 139 2364 smbd
tcp ANY 21 1813 vsftpd
tcp ANY 22 1855 sshd
tcp ANY 25 3229 master
tcp ANY 3306 2896 mysqld
tcp ANY 3690 3053 svnserve
tcp ANY 389 2293 slapd
tcp ANY 445 2364 smbd
tcp ANY 8200 2952 minidlna
tcp ANY 902 2153 vmware-authd
tcp INTERNAL 3128 2449 squid
tcp INTERNAL 53 2386 named
udp ANY 111 649 rpcbind
udp ANY 123 2918 ntpd
udp ANY 137 2177 nmbd
udp ANY 138 2177 nmbd
udp ANY 1900 2952 minidlna
udp ANY 38408 2449 squid
udp ANY 631 648 cupsd
udp ANY 825 649 rpcbind
udp EXTERNAL 123 2918 ntpd
udp EXTERNAL 137 2177 nmbd
udp EXTERNAL 138 2177 nmbd
udp INTERNAL 123 2918 ntpd
udp INTERNAL 137 2177 nmbd
udp INTERNAL 138 2177 nmbd
udp INTERNAL 53 2386 named
udp INTERNAL 55440 2952 minidlna
答案2
Nmap一直是UNIX和Windows的重量级端口嗅探器之一,您可以使用其输出来进行各种示例。
nmap -Pn localhost
给出:
Starting Nmap 6.25 ( http://nmap.org ) at 2013-07-22 01:48 BST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0023s latency).
rDNS record for 127.0.0.1: localhost.localdomain
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
631/tcp open ipp
从 yum 仓库获取:yum install nmap
答案3
您尝试过使用 sockstat 吗?我不知道 Fedora,但我在 FreeBSD 和 Ubuntu 上使用 sockstat 来获取您正在寻找的信息。