排查網路故障的時候我們常用的乙個方法就是探測一下遠端埠是否可以連線,而乙個好的探測工具能為我們節省很多時間,下面我就分享一些常用的埠檢測的工具。
telnet
是乙個經典的telnet協議的客戶端,因為telnet
協議是乙個基於tcp的文字協議,因此我們可以用它來探測埠是否開放,其命令如下
# telnet 網域名稱或ip 埠
telnet 12.1.1.1 22
埠通的情況:
埠不通的情況:
nc
命令全稱netcat,是網路除錯中瑞士軍刀級別的工具,它的作用包括但不限於:
搭建簡單的http服務,或作為客戶端
搭建tcp服務
配合ssh中的proxycommand使用
網路檢測
我們這裡主要使用他的網路檢測的能力,其簡單的檢測命令為:
# nc -v 網域名稱或ip 埠
nc -v qq.com 80
nc
命令會顯式的列印出成功的情況,對於埠不通,nc和可能會阻塞很久也可能直接返回失敗。
埠通的情況:
埠不通的情況:
bash下存在乙個特殊的裝置檔案:/dev/(tcp|udp)//,開啟該檔案,就相當於建立了乙個socket連線,讀寫這個檔案就相當於在socket中傳輸資料。基於這個特性,我們可以用來做埠開放性檢測,呼叫方式如下:
echo > /dev/tcp/qq.com/80
埠通的情況下:
埠不通的情況下:
最後我們解釋一下埠不通的情況下為什麼會出現長時間阻塞,其實這個很好解釋:客戶端在等伺服器端返回資料報,正常情況下,如果埠未開放,服務端會直接返回乙個rst
包,客戶端收到這個包後會直接關閉socket
然後返回退出,但如果服務端配置了防火牆(iptables),直接把未開放埠的請求包丟棄,那客戶端就永遠不可能收到回報,但客戶端又不知道包被丟棄了,於是就傻傻重傳然後繼續等,直到超時。我們通過tcpdump
抓包看一下:
上圖顯示的埠通的情況,可以清晰的看到tcp三次握手四次揮手。
上圖顯示了埠不通,但防火牆丟包的情況,可以看到,客戶端一直在傻傻的重傳syn
包。
上圖是埠不通,且沒有防火牆丟包等情況,可以看到服務端直接返回了rst
包。
linux下的抓包
1.檢視網絡卡名字 cat proc net dev 2.抓取外網進來的包 tcpdump i eth0 port 8081 s 4096 w 2.pcap 3.抓取自己伺服器上的兩個程式之間訪問的資料 換成 lo這個網絡卡 4.抓取http資料 tcpdump i lo a s 0 tcp por...
linux下抓包實現原理
一 tcpdump 對於本機中程序的系統行為呼叫跟蹤,strace是乙個很好的工具,而在網路問題的除錯中,tcpdump應該說是乙個必不可少的工具,和大部分linux下優秀工具一樣,它的特點就是簡單而強大。二 linux下抓包原理 linux下的抓包是通過註冊一種虛擬的底層網路協議來完成對網路報文 ...
Linux下抓包並分析
1.首先獲取程序的pid 方法1 可以直接在系統監視器裡直接看到每個程序的pid 方法2 見這篇部落格 2.查到pid後使用netstat命令檢視該程序占用的埠 netstat nap grep pid 3.獲取到埠號後即可使用tcpdump命令抓包 1 抓包後直接在螢幕上顯示,如 tcpdump ...