來自:
http://hi.baidu.com/fjfawjb/blog/item/d41b54662a288c2faa184c54.html
問:我該如何發現哪種服務正在某個特定連接埠上監聽呢?我如何發現哪一個程式正在一個特定連接埠上監聽呢?
答:在*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協議下的連接埠。
Netstaty命令舉例
請輸入下面的命令:
# 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