如何快速查詢IP歸屬地

2022-01-24 06:03:41 字數 748 閱讀 7668

這兩天遇到這麼乙個問題,就是查詢乙個ip的歸屬地。當然我會有乙個ip段的分配列表,格式如下:

16777472    16778239    xx省 xx市

第一列是ip段的起始ip,第二列是ip段的終止ip,第三列是對應的省份。一共大概200萬條左右。

那麼好了,如何進行查詢呢?

想到的最簡單的辦法,就是二分查詢。首先對這些ip段進行首位相接的排序,之後乙個二分查詢。那麼有沒有比這個還快的方法呢?

我們分析一下上面的二分查詢的乙個缺點就是,要在所有的ip段上進行二分查詢,大概要查詢log(2000000)次才能找到乙個ip的歸屬地。那麼我們乙個自然的想法就是縮小二分的ip段的數量。可以這樣做:

根據ip的前兩個位元組,把ip段進行分組。之後在對要查詢的ip,首先根據ip的前兩個位元組,快速定位到某乙個分組,之後在這個分組中進行查詢。由於分組後,每乙個組中的ip段會少很多。所以這個方法要比赤裸裸的二分快50%左右。

左面代表所有兩位元組組合,每個單元都有兩個索引記錄其在右側陣列中的起始位置。起始位置之間的ip的前兩位元組都等於左側單元編號。

當來乙個ip時, 首先計算ip >> 16,之後找到相應的索引區間,之後在相應的區間上進行查詢。

其實,第二中方法,就是乙個以空間換時間的方法。如果內存放得下,我們完全可以計算出每個ip的對應的省和市,存放在乙個大小為2^32次方的表中。在這裡,我們取了乙個折中。

IP歸屬地查詢

urllib http api請求 re ip格式驗證 返回結果提取 tkinter 介面布局 樣式 ip定位,根據盛大ip查詢api所編寫 anthor yanzhenwei yanzhenwei1101 qq.com create version v1.0beta01 2012 03 02 la...

python查詢ip歸屬地

本來想呼叫阿里的ip介面查詢ip歸屬地。結果發現阿里的介面非常不給力,主要是不準確,不過是免費的且有地區和isp的資訊。以下是實現 coding utf 8 import requests def checkip ip url try r requests.get url,params ip,tim...

查詢ip歸屬地 小應用

快過年了,寫個小玩意 下面這個應用涉及到了一些基礎東西.1 http api呼叫 2 asynctask使用 3 textview 自動匹配 4 string 的spilt的正規表示式 應用截圖 截圖傳不上來.貼下邊 public class mainactivity extends activit...