天天看點

秋式廣告殺手技術分享:網絡請求基礎知識

最近園子裡,關于.net門檻的文章風風火火,不過這類事情每過段時間就會出來一次,是以醬油都懶的打了。

當然個人也是有想法的,特别是這兩天碰巧和一個三四年經驗的java開發者呆在一起,對方說.net就是拉拉控件時,我還是很嚴厲的批評了對方,用自己比對方更具的豐富知識,重新開機對方對.net的看法。

不知道是誰在傳播這種.net純控件論,而且這麼傳播的這個“誰",一定是個新手,是以建議新手,就不要整天跑外面亂吹了,好好學知識去吧。

對于老手,在對新手進行知識傳播時,特别是剛教授新學拉控件的時候,一定要講下.net的精深,告訴他們學的是皮毛,沒事不要亂吹自己有多厲害,做人要謙虛。

現在我們看下知識點:

現在很多開發的書,它們隻講.net的原理的開發手法,是以很多人隻局域在.net的開發,光這樣,到達100級也無法成功轉職的。

試問其它語言(java) 和.net有啥不同?

不同的隻是同樣是初級,人家比你多懂點form标簽屬性的method屬性有get、post等,action的屬性可以指定資料傳輸到哪個頁面。

而.net的新手從控件入門的不懂,其實,新手隻要順帶再學一下html,了解下基礎http協定,基本可以完勝java,是以教人控件的導師們,教的時候,除了引導學生對比檢視前後生成的html和aspx之外,form屬性,也要特别的花精力說一下。

如果你再了解一下下面的知識,就可以秒殺同級java選手了,至少不會亂吹啥.net隻是xxx。

跳出.net的領域,我們回歸一下,浏覽器輸出域名之後,發生了什麼事?

搜搜網際網路,也許同樣的标題,你可以找出的隻是後半段的事,今天這裡,給大夥補充下前半段的事:

1:浏覽器那點事:

浏覽器是什麼?其實就是一個高效的代理,負責幫使用者請求特定的網址,然後解析并呈現。

幾個必須說明的是:

浏覽器監聽的端口不是80:

通常是1024以上,而且會開好幾個,(用心想想,這麼多浏覽器,一起開的時候,都從80端口來,那不是亂套了)

是以從本機發出的請求,不是80端口,比較多是10000号以上的端口。

學會查找一個程序對應開的端口:

打開任務管理器,檢視程序對應的pid(如果預設沒顯示,在任務管理器的選項裡找,然後打勾)

tp1

接着,打開cmd:輸入netstat -nao -p tcp,往下拉:

發現找不到了,是以就不截圖了,是以這裡就得反着說了,為啥找不到了?因為浏覽器程序的端口目前沒有活動,回收了。

是以,你反過來找,通過端口找到pid,再回去找相應的程序,就一定有對應的程序。 

目前階段,秋式廣告殺手在廣告屏蔽上,取了一定的成效,以最高效的方式的,屏蔽了廣告,又不影響網絡。

不過隻能處理域名方式,有些廣告是ip形式出現的,軟體暫時不能處理,這着實讓我有點想法。

是以我最近就在想,想一些網絡請求的執行流程:

當我們在浏覽器輸入一個網址的時候?發生了什麼事?

如果你去搜網絡,會告訴你一些本機之外的事情,這裡我就講一下我知道的,本機之内的事情:

1:浏覽器拿到你的域名請求,要怎麼處理,是浏覽器的事了, 不過正規的都會按以下流程辦事:

把域名解析為ip:

如何解析呢?

1:查找浏覽器自身的dns緩存表。

2:查找系統hosts檔案。

3:查詢系統緩存(不知道這個有沒有,我隻是好像大概也許可能聽說過)

4:請求本機dns指向的伺服器。

是以大夥看到,秋式廣告殺手在開啟,調整完hosts檔案之後,需要重新開機下浏覽器的原因,就是因為浏覽器自身有dns緩存表,不重新開機,指向的還是舊的ip。

每種浏覽器,都有自身一種清空dns緩存表的機制:

像ie,可以設定系統資料庫來禁止,

像chrome,可以在浏覽器通過特殊指令調出視窗,再清除。

像firefox,可以在選項裡直接設定。 

不同浏覽器對于清空或禁止dns緩存表都有自己的一套,是以,秋式廣告殺手,隻處理了像ie,通過系統資料庫就可以處理的事情。

另外其它浏覽器,無法直接用代碼操作,你總不能去教使用者怎麼設定吧?還不如告訴使用者重新開機浏覽器的操作,就顯的更為簡單了。

如果選擇步驟一上攔截:那麼就得弄成浏覽器插件了, 通過寫浏覽器插件,你可以掌握到使用者第一手的請求,也可以對使用者請求後的東西進行修改再傳回;

寫浏覽器插件,應該是最理想的做法,但是你得懂一點浏覽器插件語言的東西,學一學新的知識。美中不足的是,寫出來的軟體,隻适用這單獨的一種浏覽器。

如果要全面有效,還得不停的針對浏覽器寫插件,然後再告訴使用者,每種浏覽器都給我裝上一個,這樣就ok了。。。。 

再不成,就自己寫個浏覽器了,浏覽器,不用内置的ie元件,自己能不能寫?

能寫,有個三五年經驗的人都能寫,别說自己不會(現有的網際網路,技術都是散落的,就怕你組合)

但寫出來考慮的因素特多:效率、性能、呈現、解析、速度,綜合起來,估計就得是千年老龜。。。

是以。。。自己玩玩,算是一種技術研究學習,倒也沒啥不可。。。 

正如上面四個步驟,hosts是排在第二位的,不過hosts隻能一條一條的寫入,好在要攔截的并不多。 

對于步驟三,基本是沒想啥法,作業系統緩存,目前還沒意圖。

對于通過修改本機dns指向自己的伺服器,這樣一來,的确可以做很多事,不過對于本人這點資金實力,往後期想,也負擔不起這種責任。

因為所有的請求都會到你伺服器,你要負責所有的解析,要是自己伺服器挂了,累大夥上不了網,不被罵死也被口水淹死。

說了這麼多,一來是要告訴大夥,軟體為什麼選擇了hosts方式。

從一講到四,都是說域名,那ip咋攔截?

這裡又得給大夥講點我所知道的網絡知識:

1:ip包 先查路由表(找到資料要發送到哪個ip(網關))。

2:再查arp表(要把ip換成mac位址)。

3:實體硬體把資料傳到網關(把資料送到mac位址上去)

4: 到了網關(開包,然後循環123找下一個發送點)

除了以上的,還有好多通過設定是可以阻止ip請求的,這些設定,具體是1234的前中後,哪一步攔截的?

留給大夥想。

如果我們要阻止某個ip的請求,我們可以怎麼做?

1:修改路由表,把指定的id,忽悠到一個不存在的網關去,這樣ip送不出去,自然就實作了屏蔽的功能。

2:修改arp表,把網關的位址,忽悠一個不存在的位址,這樣,恭喜,你斷網了。。哈哈。

3:攔截網卡的資料,資料總是要從一個網卡跳到另一個網卡的,通過攔截網卡的資料,這就回到了上面說的全局攔截了。

4:網關攔截(這通常就是路由器了,除了特定的路由器提供攔截設定外,哥們也掌控不到)

這裡就得說了,你要開了規則限制,等于全局攔截檢測了,網速難免會慢一些的,雖然路由器的算法很高效。

是以,下一次增加的功能,應該會從路由表出發,限制特定的ip,到鬼門關去,讓它回不來。

另外要說一下的,經常電信或其它寬帶會彈廣告,我們習慣性的會說,是dns攔截彈的廣告。。

我就在想啊。。這dns攔截,這dns攔截,最多也就指向新的ip,也不至于能修改資料吧,總不能dns伺服器,還負責幫你請求資料,再插入廣告吧?

是以哥是這樣想的:能攔截請求的,隻有電信或其它寬帶網關(它才是資料進進出出的視窗,隻有這裡攔截,傳回時再插入廣告)

是以dns攔截彈廣告,是不是錯誤的讓人以為,dns也能是實作廣告傳回?

如果dns真能修改請求後的資料,插入廣告,那軟體回歸dns攔截,不是更爽朗。。。。 

是以是不是應該換個名,叫電信網關攔截彈廣告之類的。。。。 

本人非網絡專業,以上對網絡的忽悠及見解,純屬個人認知,不代表權威,若有錯誤的,歡迎批評指正。

版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:http://www.cnblogs.com/cyq1162/archive/2012/11/25/2787770.html