簡述12306網站春運搶票插件的工作原理

  好久沒有自己寫日誌了啊,先說明一下,這篇文章也並非完全原創,事先是有專門查找過相關技術文檔的,畢竟菜鳥水平有限(這也是菜鳥一直自稱“菜鳥”的原因)。因爲就快要過年了,而公司一個ERP需要在年前推出來,所以這段時間公司研發部幾乎天天都在加班趕項目,今天我也是忙裏偷閒才寫得這個文章。
 

  春節臨近,近來最火的話題無疑要數春運了,作爲一種“中國特色”,春運問題已經存在很多年了,每年此時,出門在外的遊子們幾乎使出渾身解數就
爲一張回家的車票,而今年,各種各樣的搶票插件也因此在網絡上大肆活躍流行起來,甚至很多瀏覽器廠商都在此時推出了自己的搶票插件,不少用戶欣然使用,並也藉此順利買到了的難得的車票。但一系列問題隨之而來:搶票插件真得能搶到票?它到底是不是惡意攻擊軟件?用戶使用搶票插件買票算不算是“加塞兒”的行爲呢?搶票插件該不該被取締呢?

  在搞清這些問題之前,先來簡單介紹一下什麼是搶票插件:所謂搶票插件,就是一個運行在瀏覽器上(當然也可運行於其他平臺之上),幫助用戶完成在12306網站上‘搶火車票’功能的軟件;再來簡單解釋一下搶票插件的工作原理,明白了它的工作原理,上面的疑問自然也就解開了。

  先拋開插件、攻擊、瀏覽器這些互聯網專業詞彙,通俗地舉一個我們日常生活中的小例子:

  話說有一家賣時光機的商店生意火爆,顧客人滿爲患,但即便是這樣,該商店也只有一個收銀臺,而且在這家商店裏,對於任何一種款型的時光機,都只有某一特定的數量,售完則止;再者該商店還有這樣一個規定:在你順利選中某款中意的時光機並且要爲此付費的時候,如果商店收銀臺有人正在付費,那麼你就必須放下該商品並且立刻離開商店(一秒鐘也不能停留),出去溜達回家吃飯都行,總之必須離開,離開時間長短也無所謂。等到你再次回來時,你需要再次選商品並再次付費,但是如果這次收銀臺還是有人,那你就還要繼續放下商品,繼續離開,這樣一直循環下去,直到某次你回來的時候正好選中商品並且收銀臺也是空餘的。

  從這裏大家可以很清楚的看到,這個垃圾規定的要命之處有兩個,第一:每款時光機的數量都是有限的,而需要的人又有很多,我不一定能夠在衆多顧客的爭搶中拿到我中意的那款時光機;第二:有可能在我付費的時候收銀臺有人,而我離開的這段時間裏商店的收銀臺卻沒人的,只是不巧當我再次回來的那一瞬間收銀臺又有了人,於是我又得放棄並離開,如果一個人很倒黴,每次他來的時候都有人,走了就沒人,那麼他想付費成功就需要來來回回走很多次很多次,這樣就會浪費很長的時間和精力。

  作爲顧客,我們沒辦法左右這家可惡商店的垃圾規定,只能背後在微博上吐糟一下,至於上述第一點,每款時光機數量有限而顧客無限(相比於時光機數量而言),所以顧客搶商品就再所難免了;從技術角度看,顧客自己可控的操作更多的體現在第二點上,這裏重點講第二點:爲了解決第二點所指的問題,通常最簡單的方法就是我們儘可能縮短出去溜達的時間,就是說當每一次我們選中商品卻付費失敗離開之後,我們過很短的時間就回來看一次,即過很短的時間就再去收銀臺看看是否有人,如果沒人,就立即付費,免得錯失機會,顯然,這麼做很麻煩效果卻不見得有多好,而且更像是在浪費生命。

  這時有個聰明人站了出來,他發明了一個機器人,在你出去溜達的時候,他可以按照你事先設定的頻率,每隔幾秒鐘就去替你看看有沒有人在收銀臺付費,一旦發現沒人就立刻打電話叫你:“快來,收銀臺空餘,可以付費了!”這樣我們就可以放心的去看電影、吃飯、打遊戲了,一旦收到機器人的電話就立馬飛奔回去付費。

  看到這裏,我相信大家都知道了,時光機就是火車票,而12306網站就是那家無良心又噁心的商店,一旦用戶的購票請求提交失敗,用戶就必須放棄本次請求,再重新發起另一次購票請求(與之前那次屬於兩次不同的請求)。對於互聯網操作來說,重新發起購票請求就相當於“出去溜達溜達再回來”。搶票插件就是那個機器人,在你出去溜達的時間裏替你向12306提交購買請求。根據事前的設定,搶票插件會每隔10秒(也可以是5秒3秒)就向12306發起一次請求,一旦搶票插件發現“時光機”有餘貨並且“收銀臺”沒人,他就會向你發出通知,以音樂或者彈出框的形式告訴你:“有票啦,趕緊來買票吧”。所以,有了搶票插件替你“值班”,你就可以放心地去刷刷微博,看看電影,或者寫寫年終總結了。

  可見,從這個角度來講,搶票插件是一款很不錯的產品,它幫助我們克服12306本身的技術缺陷,更快捷、更簡單也更方便地買到回家的車票;使用搶票插件也不是“加塞兒”的行爲,他不是把後來的人提到前面,而是讓本來就排在前面的人不要錯失在前面就能成功付費(成功買票)的機會。

  正如凡事都有兩面性一樣,搶票插件也有它不好的一面。大家可以想見,12306網站之所以難登錄,響應慢,一方面是因爲12306網站本身的問題,但是更多的是因爲12306網站訪問的人數實在過多,這一點從咱們國家春運龐大的人流基數和各個車站的擁擠程度就能知道,12306網站的服務器經受不住如此巨大的訪問和請求壓力。而搶票插件每隔10秒(甚至5秒3秒)就向它提交一次購票請求,這遠遠高於一個普通實體自然人正常的訪問頻率,這就進一步加劇了12306網站服務器的承載壓力,導致了“越慢越搶越搶越慢”的惡性循環狀況的出現。

  在網絡安全領域,有一種黑客攻擊手段被稱爲DDOS(Distributed Denial of Service,分佈式拒絕服務)攻擊,這是一種最原始、最暴力、最沒有技術含量但是很多時候卻最有效的攻擊手段,其原理是通過控制多臺電腦(通常是幾萬到幾十萬臺)對某一個網站服務器密集的發起訪問(訪問壓力可以達到每秒數百萬到數千萬次),造成該服務器對其他正常請求響應緩慢甚至宕機(癱瘓)的情況。

  如果把搶票插件的刷票頻率設置的極端化,也會達到和DDOS攻擊相類似的效果。例如搶票插件的訪問時間間隔不是10秒,而是0.1秒,也就是每個搶票插件每秒鐘向服務器提交10次請求;再假設全國有100萬人(高峯時段遠不止這個數字)在同時使用搶票插件。那麼簡單計算一下可知,搶票插件將會對12306網站的服務器造成每秒高達1000萬次的請求壓力。這個數值是龐大的,而真實的數據在某些高峯時段往往比這個更大,對於當下IT界絕大部分網站的服務器而言,每秒千萬次級別的請求壓力都是極端恐怖的。

  但是搶票插件與DDOS還是有很大區別的:

  1.搶票插件雖然客觀上加大了12306網站的訪問及請求壓力,但是主觀上還是爲了幫助用戶快速買到車票。這與DDOS攻擊就是了讓被攻擊網站的服務器宕機的目的是有本質不同的,DDOS攻擊是惡意的(通常只有黑客纔會
使用)。

  2.搶票插件是用戶主動(或同意)安裝到自己電腦上的,並且啓用搶票插件對12306的訪問行爲也是用戶主動發起的,同時只要他願意,可以隨時終止搶票插件的訪問行爲。而DDOS攻擊的發起者通常都是事先通過隱祕的手段侵入他人電腦(黑客專業術語叫肉雞),再通過控制肉雞對某網站發動攻擊。在整個攻擊過程中,肉雞的主人既不能決定何時開始攻擊,也不能決定何時終止攻擊,甚至很多都不知道自己的電腦已經成爲了黑客們的肉雞。

  3.搶票插件在用戶與用戶之間是相互獨立的,訪問行爲都是用戶自發的,之所以出現大量用戶同時使用搶票插件完全是因爲春節臨近大量遊子
買票返鄉心切以及國家鐵道部的售票政策方案本身存在很大的缺陷;而DDOS攻擊是有計劃有組織的,攻擊發起人有意控制大量肉雞同時向目標網站發起的攻擊。

  所以可以總結:搶票插件會對12306網站造成巨大的訪問請求壓力,但它並不是12306網站的惡意攻擊軟件。

  解決搶票插件使用氾濫最根本的方法,就是優化鐵道部的售票方案和提高12306網站的技術水平。第一,在重大節假日前後應當臨時提升服務器抗壓能力。第二,提高網站製作水平,降低不必要的訪問壓力和帶寬佔用,阻止惡意訪問。第三,爲用戶提交的購票請求建立隊列(數據結構的一種),即先來後到,排隊購票。

  最後順便多說一句,菜鳥友善提醒各位:現在互聯網上流行的搶票插件,很多都帶有後門程序,特別是那些不明來路的產品,望廣大遊子務必提高警惕,能不用最好別用,以免被那些後門程序盜走了網銀或銀行卡的賬號與密碼。真心希望童鞋們都能成功購票,安全返鄉,幸福過年(其實菜鳥明白,這比維護世界和平還要困難,囧~~)。


注:本文取自博主QQ空間日誌

發佈了11 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章