什麼在使用這個網路套接字?

什麼在使用這個網路套接字?

我正在嘗試使用 NTP 來更新我的計算機上的時間。但是,它給了我一個錯誤:

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

錯誤「套接字正在使用中」是什麼意思?我怎麼才能看到什麼正在使用這個套接字?

這種情況發生在我的 CentOS 4.x 系統上,但我也在 FreeBSD 7.x、Ubuntu 10.04 和 Solaris 10 上看到它。

答案1

你可以做

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

查看所有監聽端口,但 ntpd 正在運行:

service ntpd status

至於「正在使用的套接字是什麼意思」?如果我可以原諒我撫平一些皺紋(對於非常基本的解釋,其中大部分的道歉對您來說是補救措施)...TCP/IP(互聯網語言)指定每台計算機都有一個 IP 位址,它在網際網路上唯一識別該計算機。此外,每個 IP 位址上還有 65,000 個可連接的編號連接埠。

當您想要連接到 Web 伺服器時,您可以在瀏覽器中開啟該站點,但底層的機器實際上是將您連接到 Web 伺服器 IP 上的連接埠 80。 Web 伺服器的守護程序(偵聽連接埠 80 連線的程式)使用「套接字」來保持該連接埠的開啟狀態,並將其保留給自己。同一時間只有一個程式可以使用同一連接埠。

由於您運行了 ntpd,因此它正在使用該連接埠。 「ntpdate」嘗試存取該端口,但由於它已保持開啟狀態,因此您收到「套接字已在使用中」錯誤。

編輯
也更改為 UDP 帳戶

答案2

您也可以使用 netstat 來尋找開啟的套接字 - 它比使用 lsof 乾淨得多,正如其他海報所建議的那樣。以 root 身分嘗試此命令列

netstat -lp -u -t

查看所有監聽連接,包括其關聯的 pid 和程序。 -l 參數指定偵聽連接,-p 指定您想要查看 PID/名稱,-t 和 -u 告訴 netstat 您只需要 TCP 和 UDP 連線(IPv4 和 IPv6)。

如果您想查看數字連接埠和主機名稱(即,在主機的情況下未解析,在連接埠的情況下未轉換為服務名稱),您可以新增-n至上面的命令列。

編輯:這可以在 Linux 上運行——我不知道它在 BSD 上運行得如何,因為我周圍沒有任何基於 BSD 的機器。

答案3

在 FreeBSD 上,如果 lsof 不起作用(例如,在出於某種原因沒有 /dev/mem 的虛擬化系統上),您也可以使用 sockstat。若要取得所有正在偵聽 IPv4 套接字的程式的清單:

sockstat -l4

答案4

您可以使用lsof來尋找哪個應用程式正在使用此套接字。

相關內容