netstat命令輸出結果分析

netstat命令一般用來查看IP/Port佔用情況,在網絡程序員那裏就可以用於檢測數據發送/接收的端口是否正確。比如最近在做“視頻實時傳輸”項目時就是用它發現問題的。所以有必要看懂netstat命令輸出結果的含義,下面給出三個典型的結果:



說明:Tserver01爲一個UDP服務器測試程序,用於接收客戶端的請求數據,然後回傳另一組數據到客戶端。

UDP ——傳輸協議爲UDP協議

0.0.0.0:1234 ——本地IP/Port信息。

其中0.0.0.0有兩種解釋:

1、0.0.0.0代表本機上可用的任意地址。 比如0.0.0.0:1234表示本機上所有地址的1234端口,這樣多ip計算機就不用重複顯示了。
2、0.0.0.0爲默認路由,即要到達不在路由表裏面的網段的包都走0.0.0.0這條規則。

其實,我們可以“通用”理解爲代表“本機地址”,1234在程序中體現爲綁定的1234端口號

0.0.0.0:*——目的地址IP/Port信息。

其中0.0.0.0:*依然有兩種解釋:

1、此程序只作了綁定套接字操作,沒有發送數據到目的地址,也就是沒有目的地址。(此時可以是客戶端已經發起並建立了與本服務器的通訊,也可以是客戶端沒有開啓。總之是服務器沒有向外部發出數據)

2、有目的地址,且發送了數據,但是由於是UDP傳輸,沒有用connect函數建立兩端連接。

而作爲此測試程序就是:採用UDP協議,並在回傳數據時採用了connect綁定客戶端地址,但是客戶端並沒有開啓,導致並沒有建立連接。



由上述的知識,可以直接得到如下信息:

解釋:

Tserver01程序採用UDP協議傳輸數據,綁定本地115.28.183.194:1234地址信息,並調用connect函數綁定目的地址221.212.116.50:9781建立了本地—>目的的連接。(至於是否發送數據並不知曉)

 

解釋:

videoserver程序綁定本地套接字接受客戶端X的連接(0.0.0.0:1234—>0.0.0.0:*),同時綁定了另一個套接字(IP/Port),並調用connnect函數與客戶端Y建立連接並通信(X 和Y可以是同一個客戶端)。

(PS:程序問題也就是在這裏發現的,我們明明通過客戶端2與服務器建立端口號是1234的NAT穿透,但是實際程序卻用另一個沒有被“穿透的”44268隨機端口向客戶端2發送數據,導致數據傳輸到內網後被丟棄。)


此命令此時簡單的做一下本地/目的地址間是否正確的測試,而且是本地—>目的的單向測試,即目的客戶端是否向本地服務器發起了連接是看不出來的(需要在客戶端運行的主機進行測試。)如果需要更爲詳細的數據發送問題的測試,可以運行tcpdump命令進行抓包查看。推薦博客:http://blog.chinaunix.net/uid-11140746-id-2903933.html

發佈了50 篇原創文章 · 獲贊 150 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章