今天在這裡簡單的重複解釋下高精度ip定位原理:運作在手機裡的軟體,具備了擷取gps位置的能力,就可以把擷取的gps坐标通過網絡發送給後端伺服器。是以在後端伺服器,就可以維護一張表格,記錄着某個ip和某個gps坐标的對照關系。
我們仔細看我簡述的定位原理,可以觀察到:
1,手機裡的app,能擷取位置資料
2,手機裡的app,能夠通過公網與背景伺服器互動。
3,手機有可能是連接配接了wifi,此時所使用的是家庭寬帶的網絡
4,如果使用了家庭寬帶網絡,那麼有可能這個家庭寬帶的網絡具備公網ip到戶性質,也就是說家裡的路由器擷取了公網ip位址,這個位址不是192.168.xx開頭,也不是10.xxx開頭,還不是172.xxx開頭。這時候背景所擷取的ip和gps坐标,精度就非常高。最高精度定義為30m,也就是普通家用wifi最大能覆寫的圓形直徑。
5,如果使用了家庭寬帶網絡,可能營運商ip資源不足,進行了叫做nat轉發的技術。這時候可能得到的就是10.xxx開頭的一個内網位址,而真正的公網ip的位置在這個覆寫區域内的某個地方,這時候,這個手機送出的ip和gps坐标資料就有誤差。而這個誤差,是同一個區域網路網段下的其他手機所提供,這樣以來,就是覆寫一個街道,一個城市,甚至一個省的情況
6,如果手機使用的是手機卡的gprs流量上網,則肯定是經過了nat的網絡結構。國内的營運商往往是一個省有一個ip池,随機的用來得使用者的手機轉發上網,這個情況,就出現了一個省機關範圍的很多手機上報的ip和gps坐标的對照,平均一下,範圍就非常大。
7,在說說高精度ip查不到位置的情況:沒有位置服務功能的裝置在這個ip下使用過。比如,opengps.cn站點釋出在阿裡雲的青島節點的ecs上。站長從來沒有在這台伺服器使用過代理功能,流量始終是這個伺服器自己所占用。這時候,因為沒有這種具備擷取位置功能的手機等裝置上報位置,是以就查詢不到結果。
==========分割線===========
接下來再說說防禦
很多人覺得這個做法有些無恥,未經使用者同意。事實上,運作這種服務都是被經過了許可的,隻不過往往沒有人在使用前仔細去查閱“使用者協定”文檔。才出現了這個了解誤區。
要說防禦,其實不用才是最安全的。顯然我這麼說會被噴,因為現實生活當中,人們對手機的依賴程度已經相當高。那麼怎麼防禦呢?有人針對百度這項服務,為了不被百度采集,直接使用技術手段修改hosts,讓百度的位置服務相關的域名不能正常解析。這樣雖然也是個辦法,但是不提倡,因為這是有點因噎廢食的做法。畢竟家裡來個客人,還是很有可能連接配接你家wifi的,還要告訴客人說,我要修改一下你的手機,不讓百度位置服務運作。顯然這個做法不合實際。有人指出,可以從路由器裡改造,實作這個區域網路下的接入裝置都不能使用百度位置服務。這樣其實也不行,畢竟平常用的uber啥的,還是要調用百度服務的。百度的這項服務初衷是為了提高位置服務的體驗,現在卻會因為這個防禦手段,連基本的百度地圖都不能打開了。顯然得不償失。這裡再多延伸一點:就算成功屏蔽了百度的服務,你能確定手機上其他應用沒有擷取你的位置?比如高德地圖,騰訊地圖,谷歌地圖,qq,微信等等,是個手機應用就可以實作這個【ip和gps資料】采集動作。是以完全沒有必要采取徹底屏蔽百度服務的做法。
小編的觀點,防禦并非不可能,隻是暫時沒有多高的必要性,是以如果介意這個采集過程,可以針對精度幾十米幾百米範圍的使用者,嘗試一下。前面說的幹擾百度的域名解析,也是個解決方法,但是帶來一堆問題,小編不提倡。
小編建議的防禦方式: 1,經常重新開機路由器; 2,平常手機不需要使用位置服務時候,選擇關閉位置功能(不僅僅是關閉gps,還要關閉網絡定位); 3,關閉小衆軟體的定位權限。這個防禦方式有一定的針對性,如果用的是固定ip,顯然毫無作用。但是小編之是以把這個辦法列在最前面,主要原因在于,目前的網絡結構下,聯通電信這種營運商才具備足夠豐富的ip資源可配置設定。而且ip是動态随機配置設定,通常情況下重新開機路由器就可以變更自己的ip,變化之後,手機裡的位置類應用就需要依靠重新采集才能準确,而且目前小編觀察到,百度的服務雖然是大資料實時建庫分析,但仍然存在幾個小時幾天的更新周期。是以每天重新開機下路由器變化一下自己的公網ip,就很大程度下保護自己位置資訊。如果用的是小營運航的網絡,基本無需考慮這個問題,因為多數小營運商ip資源有限,基本不會提供公網ip到戶的情況。就算有人拿到了你的公網ip,幾千米甚至一個城市的範圍也不會構成什麼明顯影響。