我的程序打開這種功能的插座:檢查所有插座在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的值(從套接字返回)以獲得更好的錯誤處理。 –