我的程序打开这种功能的插座:检查所有插座在Linux操作系统打开
的sockfd =插座(AF_INET,SOCK_RAW,IPPROTO_ICMP)
发送完数据后关闭套接字:
close(sockfd);
但问题是,当程序运行不正常,并阻止。从而套接字不会被关闭。
如何检查在Linux操作系统下打开的所有套接字?
我的程序打开这种功能的插座:检查所有插座在Linux操作系统打开
的sockfd =插座(AF_INET,SOCK_RAW,IPPROTO_ICMP)
发送完数据后关闭套接字:
close(sockfd);
但问题是,当程序运行不正常,并阻止。从而套接字不会被关闭。
如何检查在Linux操作系统下打开的所有套接字?
的/ proc /净/ TCP -a打开TCP套接字
的列表的/ proc /净开放UDP套接字
的/ UDP -a列表的/ proc /净/生-a列出所有'raw'socket
这些是文件,使用cat
命令查看它们。例如:
cat /proc/net/tcp
您也可以使用lsof
命令。
lsof的是命令的意思是“列表中打开文件”,这是在许多 类Unix系统中报告所有打开的文件和打开它们的进程 的列表。
这些命令在ubuntu(Ubuntu/Linaro 4.6.1-9ubuntu3)中不工作) ===> root @ root:/ home/aa/test#/ proc/net/** ::::: ** dev_snmp6/netfilter/rpc/stat/** –
这些都是文件,用cat命令查看,就像'cat/proc/net/tcp' –
通常使用'lsof'代替这些更容易。 – Hasturkun
您可以使用netstat的命令
netstat的--listen
要显示打开的端口建立TCP连接,
netstat的-vatn
要显示只开放UDP端口尝试使用以下命令:
netstat的-vaun
RAW ICMP套接字不会显示在我的系统上的netstat中。 Chankeys在CentOS上为我解答'cat/proc/net/raw' – Tricky
@tricky这是因为你必须使用* netstat -w -l *,或者更好的是* ss -w -l *。这些命令将显示*监听*原始套接字。如果您需要更多信息,请使用* ss -w -lnp *。 – MariusMatutiae
你也可以使用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套接字:
要显示TCP套接字:
ss -t -a
在这里,你可以阅读SS人:ss
询问的打开“文件”列表lsof的 – doctorlove
如果您需要在代码来处理,你应该在需要时保持有效的套接字的列表和关闭。 – VoidPointer
很少有题目,你应该检查socketfd的值(从套接字返回)以获得更好的错误处理。 –