clumsy 能在 Windows 平臺下人工造成不穩定的網路狀況,方便你除錯應用程式在極端網路狀況下的表現。
簡介
利用封裝 Winodws Filtering Platform 的WinDivert 庫, clumsy 能實時的將系統接收和發出的網路資料包攔截下來,人工的造成延遲,掉包和篡改操作後再進行傳送。無論你是要重現網路異常造成的程式錯誤,還是評估你的應用程式在不良網路狀況下的表現,clumsy 都能讓你在不需要額外新增程式碼的情況下,在系統層次幫你達到想要的效果:
特色:
- 下載即用,不需要安裝任何東西。
- 不需要額外設定,不需要修改你的程式的程式碼。
- 系統級別的網路控制,可以適用於命令列,圖形介面等任何 Windows 應用程式。
- 不僅僅只支援 HTTP,任何 TCP, UDP 的網路連線都可以被處理。
- 支援本地除錯(伺服器和客戶端都在 localhost)
- "熱插拔",你的程式可以一直執行,而 clumsy 可以隨時開啟和關閉。
- 實時調節各種引數,詳細控制網路情況。
例項
下面的動畫展示了 clumsy 作用於一個本地的基於 netcat 的 UDP 伺服器/客戶端的情況。仔細觀察你可以看到資料根據在 clumsy 的影響下產生了相應的變化。 如果你基本知道了 clumsy 是幹什麼用的,不妨到下載頁面選擇適用於你係統的版本進行下載。
詳細資訊
clumsy 首先根據使用者選擇的 filter 來攔截指定的網路資料。在 filter 中可以設定你感興趣的協議(tcp/udp),埠號,是接收還是發出的埠。你也可以通過簡單的邏輯語句來進一步縮小範圍。當 clumsy 被啟用時,只有符合這些標準的網路資料會被進行處理,而你不感興趣的資料仍然會由系統正常傳輸。
當被 filter 的網路資料包被攔截後,你可以選擇 clumsy 提供的功能來有目的性的調整網路情況:
- 延遲(Lag),把資料包快取一段時間後再發出,這樣能夠模擬網路延遲的狀況。
- 掉包(Drop),隨機丟棄一些資料。
- 節流(Throttle),把一小段時間內的資料攔截下來後再在之後的同一時間一同發出去。
- 重發(Duplicate),隨機複製一些資料並與其本身一同傳送。
- 亂序(Out of order),打亂資料包傳送的順序。
- 篡改(Tamper),隨機修改小部分的包裹內容。
儘管當前寬頻網路連線十分普及,但網路傳輸其本身在本質上總不是穩定的。如果你的應用程式中沒有應對各種情況的處理,那麼有可能一個丟失的 UDP 包裹都會讓你的程式崩潰。正確的除錯這類行為 顯然需要再程式碼結構上進行仔細的設計和處理,還會很花功夫。而且在某些封裝緊密的開發環境(Unity3D 自帶的網路庫可能是一個例子)下會更麻煩。clumsy 以儘可能減輕程式設計師負擔為目標, 希望提供一個簡單方便(但並不完美)的解決方案。
專案的程式碼可以在github上獲取。在下載頁面有編譯好的版本。強烈建議在使用前花點時間閱讀一下文件,來 瞭解 clumsy