在 Ubuntu/Debian 下的 lsof 指令中,我看到很多像下面這樣的行:
PROGRAM 829 root 140u sock 0,8 0t0 244182 protocol: TCP
這些線是什麼?
它們可能是 TCP 連線嘗試失敗的結果嗎?
答案1
lsof
當找不到 TCP 套接字上的附加資訊時,會顯示此行:它知道它是 TCP 套接字,但僅此而已。
我能想到的原因有二:
不太可能:套接字仍然沒有偵聽或連接:例如使用伺服器或客戶端
socket(AF_INET, SOCK_STREAM, 0)
創建 TCP 套接字但尚未調用listen(2)
或者connect(2)
。這可能是由於缺乏資源或有缺陷的軟體造成的。lsof
今天最有可能的是:在另一個運行中看到的過程網路命名空間,通常在容器(Docker、LXC、LXD ...)中,因此lsof
無法存取相關資訊並且不會顯示它。然後,您應該
lsof
從與進程相同的網路命名空間運行。這lsns
和nsenter
命令對此有很大幫助。對於您的情況,這可能會起作用:nsenter -t 829 --net lsof -n -p 829
在正常情況下,lsof
會顯示IPv4
或IPv6
代替sock
並且會顯示附加訊息,例如涉及的偵聽連接埠或位址。即使連線仍在進行中,也會顯示所涉及的位址等SYN_SENT
。