原文:
http://mp.weixin.qq.com/s?__biz=MzA3NjY1NTk0Ng==&mid=2681738379&idx=1&sn=40edbf5d28cf880536215466ef1346c5&scene=1&srcid=0811px97tj47gXhbMFnN7Otq#rd
Tips:電腦管家,360,安卓模擬器也可以模擬差網(wǎng)絡(luò)環(huán)境液荸。
來(lái)源:開(kāi)源中國(guó)
clumsy能在Windows平臺(tái)下人工造成不穩(wěn)定的網(wǎng)絡(luò)狀況,方便你調(diào)試應(yīng)用程序在極端網(wǎng)絡(luò)狀況下的表現(xiàn)。
簡(jiǎn)介
利用封裝WinodwsFilteringPlatform的WinDivert庫(kù),clumsy能實(shí)時(shí)的將系統(tǒng)接收和發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)包攔截下來(lái),人工的造成延遲霹抛,掉包和篡改操作后再進(jìn)行發(fā)送。無(wú)論你是要重現(xiàn)網(wǎng)絡(luò)異常造成的程序錯(cuò)誤卷谈,還是評(píng)估你的應(yīng)用程序在不良網(wǎng)絡(luò)狀況下的表現(xiàn)杯拐,clumsy都能讓你在不需要額外添加代碼的情況下,在系統(tǒng)層次幫你達(dá)到想要的效果:
特色:
下載即用,不需要安裝任何東西端逼。
不需要額外設(shè)置朗兵,不需要修改你的程序的代碼。
系統(tǒng)級(jí)別的網(wǎng)絡(luò)控制顶滩,可以適用于命令行余掖,圖形界面等任何Windows應(yīng)用程序。
不僅僅只支持HTTP礁鲁,任何TCP,UDP的網(wǎng)絡(luò)連接都可以被處理盐欺。
支持本地調(diào)試(服務(wù)器和客戶(hù)端都在localhost)
"熱插拔",你的程序可以一直運(yùn)行救氯,而clumsy可以隨時(shí)開(kāi)啟和關(guān)閉找田。
實(shí)時(shí)調(diào)節(jié)各種參數(shù)歌憨,詳細(xì)控制網(wǎng)絡(luò)情況着憨。
實(shí)例
下面的動(dòng)畫(huà)展示了clumsy作用于一個(gè)本地的基于netcat的UDP服務(wù)器/客戶(hù)端的情況。仔細(xì)觀(guān)察你可以看到數(shù)據(jù)根據(jù)在clumsy的影響下產(chǎn)生了相應(yīng)的變化务嫡。
如果你基本知道了clumsy是干什么用的甲抖,不妨到下載頁(yè)面選擇適用于你系統(tǒng)的版本進(jìn)行下載。
詳細(xì)信息
clumsy首先根據(jù)用戶(hù)選擇的filter來(lái)攔截指定的網(wǎng)絡(luò)數(shù)據(jù)心铃。在filter中可以設(shè)定你感興趣的協(xié)議(tcp/udp)准谚,端口號(hào),是接收還是發(fā)出的端口去扣。你也可以通過(guò)簡(jiǎn)單的邏輯語(yǔ)句來(lái)進(jìn)一步縮小范圍柱衔。當(dāng)clumsy被激活時(shí),只有符合這些標(biāo)準(zhǔn)的網(wǎng)絡(luò)數(shù)據(jù)會(huì)被進(jìn)行處理愉棱,而你不感興趣的數(shù)據(jù)仍然會(huì)由系統(tǒng)正常傳輸唆铐。
當(dāng)被filter的網(wǎng)絡(luò)數(shù)據(jù)包被攔截后,你可以選擇clumsy提供的功能來(lái)有目的性的調(diào)整網(wǎng)絡(luò)情況:
延遲(Lag)奔滑,把數(shù)據(jù)包緩存一段時(shí)間后再發(fā)出艾岂,這樣能夠模擬網(wǎng)絡(luò)延遲的狀況。
掉包(Drop)朋其,隨機(jī)丟棄一些數(shù)據(jù)王浴。
節(jié)流(Throttle),把一小段時(shí)間內(nèi)的數(shù)據(jù)攔截下來(lái)后再在之后的同一時(shí)間一同發(fā)出去梅猿。
重發(fā)(Duplicate)氓辣,隨機(jī)復(fù)制一些數(shù)據(jù)并與其本身一同發(fā)送。
亂序(Outoforder)袱蚓,打亂數(shù)據(jù)包發(fā)送的順序钞啸。
篡改(Tamper),隨機(jī)修改小部分的包裹內(nèi)容。
盡管當(dāng)前寬帶網(wǎng)絡(luò)連接十分普及爽撒,但網(wǎng)絡(luò)傳輸其本身在本質(zhì)上總不是穩(wěn)定的入蛆。如果你的應(yīng)用程序中沒(méi)有應(yīng)對(duì)各種情況的處理,那么有可能一個(gè)丟失的UDP包裹都會(huì)讓你的程序崩潰硕勿。正確的調(diào)試這類(lèi)行為顯然需要再代碼結(jié)構(gòu)上進(jìn)行仔細(xì)的設(shè)計(jì)和處理哨毁,還會(huì)很花功夫。而且在某些封裝緊密的開(kāi)發(fā)環(huán)境(Unity3D自帶的網(wǎng)絡(luò)庫(kù)可能是一個(gè)例子)下會(huì)更麻煩源武。clumsy以盡可能減輕程序員負(fù)擔(dān)為目標(biāo)扼褪,希望提供一個(gè)簡(jiǎn)單方便(但并不完美)的解決方案。
【閱讀原文】直達(dá)GitHub托管地址