問:我該如何發現哪種服務正在某個特定連接埠上監聽呢?我如何發現哪一個程式正在一個特定連接埠上監聽呢? 答:在*NIX系統中,你可以使用下面的任何一個命令來得到在一個特定TCP連接埠上監聽的列表。 Lsof:其功能是列示開啟的檔案,包括監聽連接埠。 netstat :此命令象徵性地展示各種與網路有關的資料和資訊的內容。 Lsof命令樣本 你可以輸入下面的命令來查看IPv4連接埠: # lsof -Pnl +M -i4 你可以輸入下面的命令來查看IPv6協議下的連接埠列示: # lsof -Pnl +M -i6 第一欄是command,它給出了程式名稱的有關資訊。請注意標題的細節。例如,第二行的gweather* 命令從美國 NWS伺服器(140.90.128.70)擷取天氣的報告資訊,包括互動天氣資訊網路和其它的天氣服務。在這裡,我們解釋一下命令各個參數。 1. -P :這個選項約束著網路檔案的連接埠號碼到連接埠名稱的轉換。約束轉換可以使lsof運行得更快一些。在連接埠名稱的尋找不能奏效時,這是很有用的。 2. -n : 這個選項約束著網路檔案的連接埠號碼到主機名稱的轉換。約束轉換可以使lsof的運行更快一些。在主機名稱的尋找不能奏效時,它非常有用。 3. -l :這個選項約束著使用者ID號到登入名稱的轉換。在登入名稱的尋找不正確或很慢時,這個選項就很有用。 4. +M :此選項支援本地TCP和UDP連接埠對應程式的註冊報告。 5. -i4 :僅列示IPv4協議下的連接埠。 6. -i6 : 僅列示IPv6協議下的連接埠。 Netstat命令舉例 請輸入下面的命令: # netstat -tulpn 或者是 # netstat -npl 請看輸出結果::
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:6881 0.0.0.0:* LISTEN 6908/python tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5562/cupsd tcp 0 0 127.0.0.1:3128 0.0.0.0:* LISTEN 6278/(squid) tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5854/exim4 udp 0 0 0.0.0.0:32769 0.0.0.0:* 6278/(squid) udp 0 0 0.0.0.0:3130 0.0.0.0:* 6278/(squid) udp 0 0 0.0.0.0:68 0.0.0.0:* 4583/dhclient3 udp 0 0 0.0.0.0:6881 0.0.0.0:* 6908/python |
請注意,最後一欄給出了關於程式名稱和連接埠的資訊。在這裡,我們解釋一下各參數的含義: -t : 指明顯示TCP連接埠 -u : 指明顯示UDP連接埠 -l : 僅顯示監聽通訊端(所謂通訊端就是使應用程式能夠讀寫與收發通訊協議(protocol)與資料的程式) -p : 顯示進程標識符和程式名稱,每一個通訊端/連接埠都屬於一個程式。 -n : 不進行DNS輪詢(可以加速操作) 關於/etc/services檔案 /etc/services是一個純ASCII檔案,它可以提供互連網服務的友好文本名稱,還有其預設分配的連接埠號碼和協議類型。每一個網路程式都要進入這個檔案得其服務的連接埠號碼(和協議)。你可以藉助於cat命令或less命令等來查看這個檔案: $ cat /etc/services $ grep 110 /etc/services $ less /etc/services |