Contents

Tcping 測試 Tcp Port 網路狀況

在一般網路我們都使用 ping 指令去做測試網路狀況,但大多安全行關係,防火牆會把 ICMP 封鎖,導致無法測試網路,只能連該服務 port。最近公司網路出點狀況,之前有用過 MTR 測試網路狀況(參考:Java 遇到 connection timed out 問題 - 程式狂想筆記),但這次不能做 traceroute,再找找有沒有查詢方法,結果發現這個好玩的東西。

工作原理

  • traceroute:IP路由過程中對封包TTL(Time to Live,存活時間)進行處理。當路由器收到一個IP包時,會修改IP包的TTL(及由此造成的頭部檢驗和checksum變化)。每收到一個包,檢查這個 的TTL是否是0。如果是,表明這個包還沒有到達目的地,而且剩餘時間不多了,肯定是到不了目的地了。這樣路由器就簡單地丟棄這個包,並給源主機傳送 ICMP通知,說這個包已經超時了。ICMP的通知資訊裡包含當前路由器傳送時所用的IP。這樣就可以通過構造封包,來間接檢查到達一個主機時經過了哪些路由。一開始傳送一個TTL為1的包,這樣到達第一個路由器的時候就已經超時了,第一個路由器就發通知說包超時,這樣就可以記錄下 所經過的第一個路由器的IP。然後TTL加1,安全通過第一個路由器,而第二個路由器的的處理與第一個相同,丟包,發通知說包超時了,這樣記錄下第二個路 由器IP,由此可以一直進行下去,直到這個封包到達目標主機,由此列印出所有經過的路由器。

  • tcptraceroute:現代網路廣泛使用防火牆,導致傳統路由跟蹤工具發出的(ICMP應答(ICMP echo)或UDP)封包都被過濾掉了,所以無法進行完整的路由跟蹤。儘管如此,許多情況下,防火牆會准許TCP封包通過防火牆到達指定連接埠,這些連接埠是主機內防火牆背後的一些程序和外界連接用的。通過傳送TCP SYN封包來代替UDP或者ICMP應答封包,tcptraceroute可以穿透大多數防火牆。

參考: 路由追蹤:traceroute/tcptraceroute - 思卻 - 部落格園

安裝

參考:
用 tcp 协议的 traceroute 测试连接是否经过透明代理
Linux下网络测试工具tcpping、tcptraceroute的使用_51CTO博客_linux 网络测试工具

Ubuntu 安裝

1
2
3
sudo apt install tcptraceroute 
sudo wget http://www.vdberg.org/~richard/tcpping -O /usr/bin/tcping
sudo chmod 755 /usr/bin/tcping

執行發生錯誤可能需要再安裝bc

Window 安裝

可直接 scoop 快速安裝。可以看Scoop - Apps (tcping)

1
2
scoop bucket add main
scoop install tcping

使用 tcping 方法

tcping tw.yahoo.com 443

可以看到連線結果。你會發現有時候會回 No Response,代表網路沒通。

Demo

身邊沒有網路不穩的系統。想嘗試看看嗎?我之前有特別找模擬不良網路環境方法 - 程式狂想筆記方法,這邊就實作了一下。

記得電腦要在旁邊,不然無法取消就麻煩了。

1
 sudo tc  qdisc  add  dev  wlp3s0  root  netem  loss  40%

https://user-images.githubusercontent.com/6058558/225069996-375375ac-a584-4c18-99e5-dfffe75e0e2c.png

想取消可執行下指令或重開機都可以。

1
 sudo tc  qdisc  del  dev  wlp3s0  root  netem  loss  40%

其他工具

https://github.com/i3h/tcping
https://github.com/zhengxiaowai/tcping

不算能測試 http 服務穩定性

https://i.imgur.com/Qxr0BPG.jpg

最近公司網路部穩,部分打 Google API 會有些狀況,這邊研究 tcping 測試網路服務,雖然指令有 proxy 指令,但回來結果都是 400。後來突然想到不應該用這個,應該用 ab 壓力測試工具測試。

1
ab -n 100 -c 1 -X proxy[:port]   http://www.example.com/