用程式網上投票參賽獲獎

來源:互聯網
上載者:User

    年前佳能公司網站舉辦了一個星光寶貝的評選活動,通過網路投票和評委評選確定最終獲獎的星光寶貝。

    一位同事正好參加了這個活動,發動大家為她千金投票,可惜通過網頁投票速度很慢,佳能公司對投票數也有限制,一個IP地址24小時內只能投10張票,並且每投一次,都要輸入不通的驗證碼。投過一次票後,我發現這些驗證碼是純數字,還沒有燥點,應該可以用程式自動識別,實現無人幹預下的自動投票。

    沒成想程式還沒寫到自動識別那一步呢,就發現網站居然有後門,趕緊用WireShark抓取網路資料包分析了下,原來給要發送的驗證碼一個空值,就可以繞過數字驗證碼這一關。

    雖然有後門,但是也就只能加快一點投票速度,對寶貝的排名沒有一點助益。為了最大限度的增加投票量,必須利用網上豐富的Proxy 伺服器,而經過仔細分析後,我最終設計了一個架構在FreeBSD系統上的綜合解決方案,這套解決方案能夠24小時運行,當時正好手邊有一台這樣的空閑機器,就將整個系統部署在這台空閑機器上了。

    其中投票主要是分四種途徑解決的:

    一:用指令碼實現自動切換IP。同事借用了單位閒置30個IP,所以我用Shell指令碼控制機器每天午夜零點自動將自己的IP切換到這30個空閑ip上,每切換到一個IP投10張票。所以這種方法每天最多能投310張票。實現細節可以參看用shell指令碼批量連續更改FreeBSD主機ip

   
    二:在機器上配置Privoxy,Privoxy
是一個開源的匿名Proxy 伺服器網路軟體,這個網路內的每台機器實質上都是一台Proxy 伺服器。配置好privoxy後,我的程式只需要把本地機器看作Proxy 伺服器,向本機IP投票就可以了。這種方法非常簡單,但是經過一段時間的試用,發現平均每天只能投出不到1000張票。

    三:這種方法用Shell指令碼分別從代理好助手
和中國Proxy 伺服器網
採集Proxy 伺服器資訊,然後啟動一個進程向採集到的伺服器發送投票資訊,如果成功,則將該地址添加到一個列表檔案中。這種方式雖然每天都會採集幾百個Proxy 伺服器地址,但只有不到10%的地址有效,所以每天的投票量都超不過1000。下邊就是這一部分運行時的:

    用Shell指令碼來提取資訊並格式化非常方便,比如我曾經用來查看五大聯賽計分表的指令碼
和下載YouTube視頻的指令碼

    投票資訊發出後,網站的返回資訊採用了UTF-8編碼,在終端是沒有辦法正常顯示這些返回的漢字的,在Unix下的解決辦法是用iconv庫寫一個UTF-8到GB2312的轉換函式

    四:因為第三種方法每天都會發現一些能用的Proxy 伺服器地址,並將有效地址儲存到一個列表檔案中,所以第四種方法就是向這個列表檔案中的地址投票。

    每個Proxy 伺服器只能投10張票,並且Proxy 伺服器之間效能也有差異,有的能投10張,有的卻只能投1張,因此在添加到列表中時,我根據第三種方法中成功投出的票數為每一個地址設定一個初始權值,以後如果投票失敗一次,權值減1,成功一次,權值加1,如果權值為0,則自動從列表中刪去該地址。而每次投票前首先對這份列表中的Proxy 伺服器按照權值排序,從權值高的Proxy 伺服器地址開始投起。
   
    事實上最終的35萬張票幾乎都是靠這種方法投出的,隨著列表檔案越來越長,在最後一段時間內,每天的投票量都穩定在10000張以上。

    這一部分啟動並執行:


   

    整個解決方案就是綜合採用這四種方法進行投票的,投票部分的代碼全部用C/C++完成,其餘部分用Shell指令碼完成。
   
    但是好景不長,很快佳能網站就封堵了後門,驗證碼也由純數字改為了漢字,所以最終票數只有35萬多張,並且網路投票僅是一個參考,最終結果還是評委決定的,最後同事的寶寶僅得了個三等獎。是同事領到的獲獎認證:

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.