當前位置: 妍妍網 > 碼農

全網顯示的IP歸屬地,一個依賴輕松搞定...

2024-03-18碼農

來源|juejin.cn/post/7306334713992708122

經常瀏覽小視訊或各類貼文的朋友們可能已經註意到,目前許多網路平台都會顯示作者和評論區使用者的IP歸屬地。那麽,這個功能是如何實作的呢?

某些收費平台的API

我們可以利用一些付費平台的API來實作這一功能,比如一些導航軟體的開放平台API等。然而,這些服務通常是收費的,而且免費額度有限,適合測試使用,但如果要在生產環境中使用,很可能不夠支撐需求。

離線庫推薦

那麽,有沒有免費的離線API庫呢?UP現在推薦一個強大的離線庫給大家,一個準確率高達99.9%的離線IP地址定位庫,查詢速度僅需0.0x毫秒,而且資料庫僅10兆字節大小。

此庫提供了Java、PHP、C、Python、Node.js、Golang、C#等多種查詢繫結,同時支持Binary、B樹和記憶體三種查詢演算法。

這個庫大家可以在GitHub上搜尋:ip2region,即可找到該開源庫。

使用

下面使用Java程式碼給大家演示下如何使用這個IP庫,該庫目前支持多重主流語言。

1、引入依賴

<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>2.7.0</version>
</dependency>

2、下載離線庫檔 ip2region.xdb

3、簡單使用程式碼

下面,我們透過Java程式碼,挑選某個國內的IP進行測試,看看會輸出什麽樣的結果

public class IpTest {
public static void main(String[] args) throws Exception {
// 1、建立 searcher 物件 (修改為離線庫路徑)
String dbPath = "C:\Users\Administrator\Desktop\ip2region.xdb";
Searcher searcher = null;
try {
searcher = Searcher.newWithFileOnly(dbPath);
} catch (Exception e) {
System.out.printf("failed to create searcher with `%s`: %s\n", dbPath, e);
return;
}
// 2、查詢
String ip = "110.242.68.66";
try {
long sTime = System.nanoTime(); // Happyjava
String region = searcher.search(ip);
long cost = TimeUnit.NANOSECONDS.toMicros((long) (System.nanoTime() - sTime));
System.out.printf("{region: %s, ioCount: %d, took: %d μs}\n", region, searcher.getIOCount(), cost);
} catch (Exception e) {
System.out.printf("failed to search(%s): %s\n", ip, e);
}
// 3、關閉資源
searcher.close();
// 備註:並行使用,每個執行緒需要建立一個獨立的 searcher 物件單獨使用。
}
}



輸出結果為:

{region: 中國|0|河北省|保定市|聯通, ioCount: 3, took: 1192 μs}

其中,region的格式為 國家|區域|省份|城市|ISP ,缺省的地域資訊預設是0。

當然,這個庫不只是支持國內的IP,也支持國外的IP。

其他語言可以參考該開源庫的說明文件。

總結

這是一個準確率非常高的離線庫,如果計畫裏有IP定位需求的,可以試下該庫。

>>

END

精品資料,超贊福利,免費領

微信掃碼/長按辨識 添加【技術交流群

群內每天分享精品學習資料

最近開發整理了一個用於速刷面試題的小程式;其中收錄了上千道常見面試題及答案(包含基礎並行JVMMySQLRedisSpringSpringMVCSpringBootSpringCloud訊息佇列等多個型別),歡迎您的使用。

👇👇

👇點選"閱讀原文",獲取更多資料(持續更新中