最近發現博客園附件下載速度快了不少,據說是網站遷移到新的IDC了。於是寫了個小東東,來測試下看看單線程下載速度。
掛了一晚上,分享下測試結果- - CDN的帶寬貌似不便宜~~以后再不那么可恥的浪費了:)
大家有興趣測試看看有多快。
同樣可以測試其他網站的靜態資源,不過必須是jpg/png/gif/swf的資源文件。
因為是單連接下載的,所以發送/響應請求的那一刻時間里傳輸字節要少些,所以盡可能選擇體積大的文件。
測試腳本很簡單,順便貼下吧~
var txt:TextField = new TextField(); var loader:Loader = new Loader(); var timer:Timer = new Timer(1000); var nf:NumberFormatter = new NumberFormatter(LocaleID.DEFAULT); nf.fractionalDigits = 0; var lastDLBytes:int; var curDLBytes:int; var totalDLBytes:int; var running:Boolean; var sec:int; var sum:Number = 0; init(); function init() : void { Security.allowDomain("*"); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); timer.addEventListener(TimerEvent.TIMER, onTimer); } function onTimer(e:Event) : void { var secBytes:int = curDLBytes - lastDLBytes; lastDLBytes = curDLBytes; sum += secBytes; sec++; txtSpeed.text = int(secBytes / 1024) + " KB/S (當前)" + " / " + int(sum / sec / 1024) + " KB/S (平均)"; txtInfo.text = nf.formatNumber(sum) + " 字節 @ " + sec + "秒"; } function onProgress(e:ProgressEvent) : void { curDLBytes = e.bytesLoaded; if (curDLBytes / e.bytesTotal > 0.95) { reload(); } } function onError(e:IOErrorEvent) : void { trace("onError"); reload(); } function onComplete(e:Event) : void { trace("onComplete"); reload(); } function reload() : void { var url:String = txtURL.text + "?v=" + int(1e6 * Math.random()); trace(url); curDLBytes = lastDLBytes = 0; loader.load(new URLRequest(url)); } mcToggle.gotoAndStop(1); mcToggle.addEventListener(MouseEvent.CLICK, function() { running = !running; mcToggle.gotoAndStop(running? 2 : 1); if (running) { timer.start(); reload(); } else { timer.stop(); } });
為防止下載的數據緩存在本地硬盤里,在95%左右進度時中斷,並重新開始下載(貌似有些瀏覽器仍緩存,沒有仔細測試)。
由此可見,支持外鏈的CDN還是有些安全隱患。
攻擊者可以找一些體積較大的圖片文件,內嵌在論壇或者郵件里群發。當內嵌這些資源的頁面被打開時,流量也隨之消耗了。
要是有大量可控制的傀儡主機就更容易了,因為可以偽造http refer,所以外鏈也不容易防住。
簡單的計算下,假設即使只有1000個可控的計算機,平均速度100KB,那么每秒就可消耗100M流量,每小時可消耗360G的流量!若是按流量計費的話,攻擊也可以造成不小的損失。