1. 程式人生 > >使用 PsPing & PaPing 進行 TCP 埠連通性測試

使用 PsPing & PaPing 進行 TCP 埠連通性測試

PsPing & PaPing 介紹

通常,我們測試資料包能否通過 IP 協議到達特定主機時,都習慣使用 ping 命令。工作時 ping 向目標主機發送一個 IMCP Echo 請求的資料包,並等待接收 Echo 響應資料包,通過響應時間和成功響應的次數來估算丟包率和網路時延。但是在 Azure 中,ICMP 包無法通過防火牆和負載均衡器,所以不能直接使用 ping 來測試 Azure 中的虛擬機器和服務的連通性(VPN 和 Express Route 通道中的流量不經過負載均衡器,所以只要鏈路上的防火牆允許 ICMP 包傳遞,ping 依然可用)。

為了在 Azure 中進行連通性測試,例如測試 RDP、SSH 埠可用性,或者 HTTP、HTTPS 服務穩定性,甚至測試從 Azure 向外部服務的連線,我們都推薦使用 PsPing 或 PaPing。PsPing 是微軟 PSTools 工具套件中的其中一個命令。除了ICMP ping 測試,它主要用來測試 TCP 埠的連通性,還可以測試 TCP/UDP 網路時延和頻寬。不過, PsPing 只能在 Windows 中執行。如果您需要在 Linux 中發起 TCP 埠連通性和網路時延的測試,可以使用 PaPing 。PaPing 是一個跨平臺的開源工具。它的功能相對 PsPing 而言更簡單,只支援 TCP 埠的相關測試,不支援 UDP 埠的測試。

PsPing

下載和安裝

PsPing 下載地址包含了它的詳細使用方法,若有需要可以檢視此頁面上的幫助資訊。下載完後,可以單獨將 psping.exe 命令解壓出來放在任意路徑,然後從命令提示符來執行。當然,您也可以將整個壓縮包解壓到指定的路徑來獲取壓縮包內完整的 PSTools 工具套件。

使用方法

開啟命令列提示符視窗,進入到 psping.exe 所在的目錄,就可以執行 PsPing 了。如前文所述,PsPing 支援的測試方法有很多,這裡我們主要介紹針對 TCP 埠的連通性測試。最簡單的測試方法就是直接在 psping.exe 命令後面加上要測試的主機名和埠,然後執行。這裡以從 Azure 內部測試 www.azure.cn 的 TCP-80 埠為例,命令為psping.exe www.azure.cn:80

C:\Tools>psping www.azure.cn:80

PsPing v2.10 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

TCP connect to 116.211.251.197:80:
5 iterations (warmup 1) ping test:
Connecting to 116.211.251.197:80 (warmup): from 10.91.1.4:51413: 34.69ms
Connecting to 116.211.251.197:80: from 10.91.1.4:51414: 29.11ms
Connecting to 116.211.251.197:80: from 10.91.1.4:51415: 30.56ms
Connecting to 116.211.251.197:80: from 10.91.1.4:51416: 49.02ms
Connecting to 116.211.251.197:80: from 10.91.1.4:51417: 43.84ms

TCP connect statistics for 116.211.251.197:80:
  Sent = 4, Received = 4, Lost = 0 (0% loss),
  Minimum = 29.11ms, Maximum = 49.02ms, Average = 38.13ms

我們可以看到,PsPing 獲取到 www.azure.cn 的IP為 175.25.168.95。隨後進行了一次熱身測試,熱身測試的目的在於使正式的測試資料更準確。最終統計結果只計算 4 次正式測試資料。其中,統計結果第一行包含傳送請求的次數,接收到迴應的次數,連線丟失的次數以及丟失百分比。第二行為最小、最大以及平均的響應時延。 我們還可以在命令列中新增引數來定義 PsPing 進行測試的方式。以下為 PsPing 進行 TCP 連線測試時所支援的引數:

-t 類似於 ICMP 的長 ping 測試,直到按下 Ctrl+C 停止測試,並顯示統計結果;
-n 指定測試次數。還可以指定測試的時間長度,以秒為單位,使用時在數字後加上 s,例如“10s”;
-i 每次測試的間隔,預設為 1 秒。還可以指定為 0 來進行快速 ping 測試;
-w 熱身次數,預設為 1 次;
-q 測試過程中不輸出結果,結束後顯示統計結果;
-h 將時延結果統計為直方圖列印(預設列印 20行),也可以指定結果行數,比如 -h 10,指定 10 行;另一種使用方法是統計自定義時延,比如 -h "65,70",結果將統計時延分別為 65 和 70 毫秒的次數;
-4 強制使用 IPv4;
-6 強制使用 IPv6;

更多時候,我們指定測試次數,例如 500 次、1000 次。待測試結束後檢視統計結果,根據連線成功率和 TCP 響應時延來判斷被檢測服務的可用性和穩定性。不過,由於是測試 TCP 連線,測試時不排除被測試服務有一定的防護機制,對連續、大量的 TCP 連線採取拒絕服務或者限制服務,導致測試結果看起來很槽糕。這需要測試人對被測試服務有一定的瞭解。

我們還是以測試 www.azure.cn 為例,測試 500 次連線的命令為 psping.exe -n 500 www.azure.cn:80

C:\Tools>psping -n 500 www.azure.cn:80

PsPing v2.10 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

TCP connect to 175.25.168.95:80: 501 iterations (warmup 1) ping test: Connecting to 175.25.168.95:80 (warmup): from 10.91.1.4:51531: 2.28ms Connecting to 175.25.168.95:80: from 10.91.1.4:51532: 1.86ms Connecting to 175.25.168.95:80: from 10.91.1.4:51533: 2.67ms .................... Connecting to 175.25.168.95:80: from 10.91.1.4:52029: 1.90ms Connecting to 175.25.168.95:80: from 10.91.1.4:52030: 2.69ms Connecting to 175.25.168.95:80: from 10.91.1.4:52031: 2.69ms Connecting to 175.25.168.95:80: from 10.91.1.4:52032: 2.39ms

TCP connect statistics for 175.25.168.95:80:
  Sent = 500, Received = 500, Lost = 0 (0% loss),
  Minimum = 1.49ms, Maximum = 4.72ms, Average = 2.35ms

PaPing

下載和安裝

PaPing 下載網址,其中 32 位 Linux 對應的壓縮包為 paping_1.5.5_x86_linux.tar.gz,64 位的 Linux 對應的壓縮包為 paping_1.5.5_x86-64_linux.tar.gz。下載完成後,直接解壓到任意路徑,就可以直接執行了。

以 64 位 Linux 為例:

#cd ~
#wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/paping/paping_1.5.5_x86-64_linux.tar.gz
#tar zxvf paping_1.5.5_x86-64_linux.tar.gz

使用方法

PaPing 的使用方法與 PsPing 非常相似,甚至更簡單,功能更單一。PaPing 所支援的引數如下:

-p, --port N 指定被測試服務的 TCP 埠(必須);
--nocolor 遮蔽彩色輸出;
-t, --timeout   指定超時時長,單位為毫秒,預設值為 1000;
-c, --count N   指定測試次數。

預設 PaPing 的結果會根據 Shell 的色彩配置輸出不同顏色。如果您將結果通過“>”輸出到檔案,建議使用 --nocolor 引數。這樣輸出的檔案中就不會包含色彩相關的字元,更方便後期處理。

同樣以測試 500 次對 www.azure.cn 的 80 埠的 TCP 連線為例,跳轉到 PaPing 所在的路徑後,執行 ./paping -p 80 -c 500 www.azure.cn

[[email protected] ~]$ ./paping -p 80 -c 500 www.azure.cn
paping v1.5.5 - Copyright (c) 2011 Mike Lovell

Connecting to 1stcncloud.dtwscachev290.ourwebcdn.com [112.17.28.203] on TCP 80:

Connected to 112.17.28.203: time=8.26ms protocol=TCP port=80
Connected to 112.17.28.203: time=7.48ms protocol=TCP port=80
Connected to 112.17.28.203: time=9.62ms protocol=TCP port=80
Connected to 112.17.28.203: time=8.54ms protocol=TCP port=80
....................

Connected to 112.17.28.203: time=9.59ms protocol=TCP port=80
Connected to 112.17.28.203: time=11.79ms protocol=TCP port=80
Connected to 112.17.28.203: time=8.14ms protocol=TCP port=80
Connected to 112.17.28.203: time=10.94ms protocol=TCP port=80
Connected to 112.17.28.203: time=22.35ms protocol=TCP port=80

Connection statistics:
    Attempted = 500, Connected = 500, Failed = 0 (0.00%)
Approximate connection times:
    Minimum = 6.46ms, Maximum = 25.00ms, Average = 12.40ms




Troubleshooting with the Windows Sysinternals Tools

https://docs.microsoft.com/zh-cn/sysinternals/learn/troubleshooting-book

Table of Contents

  • Part I: Getting started
    • Chapter 1 Getting started with the Sysinternals utilities
    • Chapter 2 Windows core concepts
  • Part II: Usage guide
    • Chapter 3 Process Explorer
    • Chapter 4 Autoruns
    • Chapter 5 Process Monitor
    • Chapter 6 ProcDump
    • Chapter 7 PsTools
    • Chapter 8 Process and diagnostic utilities
    • Chapter 9 Security utilities
    • Chapter 10  Active Directory utilities
    • Chapter 11  Desktop utilities
    • Chapter 12  File utilities
    • Chapter 13  Disk utilities
    • Chapter 14  Network and communication utilities
    • Chapter 15  System information utilities
    • Chapter 16  Miscellaneous utilities
  • Part III: Troubleshooting — "The Case of the Unexplained..."
    • Chapter 17  Error messages
    • Chapter 18  Crashes
    • Chapter 19  Hangs and sluggish performance
    • Chapter 20  Malware
    • Chapter 21  Understanding system behavior
    • Chapter 22  Developer troubleshooting