检查linux OS中打开的所有套接字

时间:2013-07-08 09:38:10

标签: c linux

我的程序打开一个带有此功能的套接字:

  

sockfd = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)

完成发送数据后,套接字关闭:

  

接近(的sockfd);

但问题是当程序运行不顺畅并且阻塞时。因此插座不会关闭。

如何检查在Linux OS下打开的所有套接字?

3 个答案:

答案 0 :(得分:29)

  

/ proc / net / tcp-open tcp套接字列表

     

/ proc / net / udp - 打开的udp套接字列表

     

/ proc / net / raw -a列出所有'原始'套接字

这些是文件,使用cat命令查看它们。例如:

cat /proc/net/tcp

您也可以使用lsof命令。

  

lsof是一个命令,意思是“列出打开的文件”,在很多中都使用了   类Unix系统报告所有打开文件和进程的列表   打开了他们。

答案 1 :(得分:26)

您还可以使用 ss 实用程序转储套接字统计信息。

转储摘要:

ss -s

Total: 91 (kernel 0)
TCP:   18 (estab 11, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*         0         -         -        
RAW       0         0         0        
UDP       4         2         2        
TCP       18        16        2        
INET      22        18        4        
FRAG      0         0         0

显示所有套接字:

ss -a

显示UDP套接字:

ss -u -a

显示TCP套接字:

ss -t -a

在这里你可以阅读ss man:ss

答案 2 :(得分:16)

您可以使用 netstat 命令

  

netstat --listen

显示开放端口和已建立的TCP连接,

  

netstat -vatn

要仅显示打开的UDP端口,请尝试以下命令:

  

netstat -vaun