国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)

這篇具有很好參考價值的文章主要介紹了【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【寫在前面】
編撰這篇文章還得從之前做安全業(yè)務(wù)需求說起,我們都知道安全攻擊都是在某臺客戶機上執(zhí)行某些惡意操作(sql注入,DoS/DDoS攻擊),致使服務(wù)端響應(yīng)異常崩潰亦或響應(yīng)數(shù)據(jù)被篡改,那么怎么去阻止這些東西呢?
首先我想到的是對訪問的web端做一個IP的校驗(好比阿里云服務(wù)器的安全組設(shè)置),建立一些白名單,這樣能在很大程度上做到一個限制,其實在服務(wù)端也應(yīng)該要開啟防火墻、設(shè)置權(quán)限等。那么我們首先得知道客戶端的IP是多少。接下來此文重點介紹如何獲取。

1、如何獲取客戶端訪問IP

其實獲取IP是最簡單的,因為只要有請求的話,都會存放在session里面的,只要通過下面這句話就可以拿到你所需要的IP,但是如何知道別人訪問你的服務(wù)器呢,這個時候就需要您自己去寫一個監(jiān)聽事件listen;
獲取IP方式如下代碼即可:

HttpSession session = request.getSession(false);
if (session == null) {
    session = request.getSession();
    System.out.println("session:" + session + "創(chuàng)建成功");
    session.setAttribute("ip", request.getRemoteAddr());
    System.out.println("----訪問的IP是:"+request.getRemoteAddr()+"----");
}

控制臺輸出:
【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)

2、如何通過IP獲取歸屬地(離線+在線)

通過上面的方式拿到了IP地址,那么我想知道是哪些地方的人訪問了我們的系統(tǒng)的話這就需要后臺去進行查詢了,這才是這篇文章的核心:

2.1 離線模式

主要是通過自己本地的離線庫來實現(xiàn)查找的,有個弊端就是需要不斷的更新。

第一步:下載離線包ip2region.xdb

首先下載一個離線的IP歸屬映射包ip2region.xdb,沒有的可以去我的百度云盤上下載
下載地址如下:
鏈接:https://pan.baidu.com/s/1l_Gfhl0TVPYXvpK9QSiXyw
提取碼:hdd6

第二步:引入離線包

將我們的離線包放在resources目錄下,如下圖所示:
【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)
Maven引入

打開項目中的pom.xml文件,將下面的代碼復(fù)制到里面去(如果有則忽略):

<!-- ip2region  -->
    <dependency>
      <groupId>org.lionsoul</groupId>
      <artifactId>ip2region</artifactId>
      <version>2.6.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.9</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5</version>
    </dependency>

開始引入時候可能會報紅,需要你自己去更新一下maven庫
【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)
沒有報紅表示本地引入成功。

Pom.xml引入靜態(tài)打包(特別關(guān)鍵,不然會報錯)
[Xxx/ip2region.xdb] cannot be opened because it does not exist

<resource>
  <directory>src/main/resources</directory>
  <includes>
    <include>jdbc.properties</include>
    <include>*.xml</include>
    <include>ipdb/*.xdb</include>
  </includes>
</resource>

主要是在構(gòu)建的時候我們java會變成class文件進行編譯,一些靜態(tài)資源需要自己手動去加才能打到j(luò)ar包里面去。

第三步:代碼實現(xiàn)

控制臺效果如下所示(國內(nèi)國外的都有):
【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)
核心實現(xiàn)代碼(記得要引入一些依賴包喲):

String dbPath = "/ipdb/ip2region.xdb";
try {
    InputStream inputStream = new ClassPathResource(dbPath).getInputStream();
    byte[] dbBinStr = FileCopyUtils.copyToByteArray(inputStream);
    // 創(chuàng)建一個完全基于內(nèi)存的查詢對象
    searcher = Searcher.newWithBuffer(dbBinStr);
} catch (Exception e) {
    System.out.printf("failed to create content cached searcher: %s\n", e);
}
//把ip2r
String address = "";
try {
    address = searcher.search("66.249.79.193");
} catch (Exception e) {
    throw new RuntimeException(e);
}
System.out.println("=== 訪問者的地址為:"+address+" === ");

到這里我們就只要維護好那個離線包文件就可以,定時更新一下。

2.2 在線模式

主要通過別人或者官網(wǎng)提供的API接口去實現(xiàn)查詢的功能,有個弊端就是特別依賴別人的服務(wù)器,萬一別人服務(wù)器掛了就訪問不了了。
具體實現(xiàn)效果和2.1離線模式介紹的一樣
【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)
主要實現(xiàn)我封裝到一個java類里面,寫了一些特定的方法;
如下所示:

public static String getAddress(String ip) {
    try {
        URL realUrl = new URL("http://whois.pconline.com.cn/ipJson.jsp?ip=" + ip + "&json=true");
        HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
        conn.setRequestMethod("GET");
        conn.setUseCaches(false);
        conn.setReadTimeout(6000);
        conn.setConnectTimeout(6000);
        conn.setInstanceFollowRedirects(false);
        int code = conn.getResponseCode();
        StringBuilder sb = new StringBuilder();
        String ipaddr = "";
        if (code == 200) {
            InputStream in = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            ipaddr = ip + "=" + sb.substring(sb.indexOf("addr") + 7, sb.indexOf("regionNames") - 3);
        }
        return ipaddr;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

調(diào)用地方如下所示:

String address = IpAddressUtils.getAddress("66.249.79.193");
System.out.println("=== (在線)訪問者的地址為:"+address+" === ");

3、推薦方式,先離線后在線

【重要】其實我們可以結(jié)合兩個使用一起,先采用離線,如果發(fā)現(xiàn)為null的話則調(diào)用在線查詢的方式。這樣在一定的程度上能夠保證數(shù)據(jù)的完整性,都有不足的話就互補一下;如下所示邏輯:

System.out.println("--- (在線+離線)訪問者的IP為:66.249.79.193 --- ");
        //================離線模式獲取=start====================//
        String dbPath = "/ipdb/ip2region.xdb";
        try {
            InputStream inputStream = new ClassPathResource(dbPath).getInputStream();
            byte[] dbBinStr = FileCopyUtils.copyToByteArray(inputStream);
            // 創(chuàng)建一個完全基于內(nèi)存的查詢對象
            searcher = Searcher.newWithBuffer(dbBinStr);
        } catch (Exception e) {
            System.out.printf("failed to create content cached searcher: %s\n", e);
        }
        //把ip2r
        String address = "";
        try {
            address = searcher.search("221.231.220.212");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
//        String address = IpAddressUtils.getCityInfo("66.249.79.193");
        System.out.println("=== (離線)訪問者的地址為:"+address+" === ");
        //================離線模式獲取=end====================//
        //======================在線模式獲取 start========================//
        if("".equals(address)){
            address = IpAddressUtils.getAddress("66.249.79.193");
            System.out.println("=== (在線)訪問者的地址為:"+address+" === ");
        }
        //======================在線模式獲取 end========================//

4、彩蛋

如果覺得這篇文章對您有幫助的話,想支持博主的可以上皇榜看看喲,皇榜點擊此處進入文章來源地址http://www.zghlxwxcb.cn/news/detail-423939.html

到了這里,關(guān)于【獲取IP歸屬地】Java如何實現(xiàn)通過IP獲取IP歸屬地 [離線+在線](附代碼,2023年親測有效)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 教你如何實現(xiàn)IP歸屬地功能

    ? ? ? ?隨著網(wǎng)絡(luò)的發(fā)展先在抖音、知乎、快手、小紅書等這些平臺已經(jīng)上線了“網(wǎng)絡(luò)用戶顯示 IP 的功能”,境外用戶顯示的是國家,國內(nèi)的用戶顯示的省份,而且此項顯示無法關(guān)閉,歸屬地強制顯示。今天這篇文章,就用幾分鐘的時間來講述一下這個功能是怎么實現(xiàn)的。

    2024年01月20日
    瀏覽(28)
  • java實現(xiàn)通過IP地址獲取mac(物理地址)

    java實現(xiàn)通過IP地址獲取mac(物理地址)

    java實現(xiàn)通過IP地址獲取mac(物理地址),只能獲取到局域網(wǎng)的mac地址,具體代碼如下:

    2024年02月16日
    瀏覽(20)
  • IP獲取歸屬地區(qū)(免費)

    使用 http://whois.pconline.com.cn/ipJson.jsp 這個 URL 來獲取 IP 地址的歸屬城市信息

    2024年02月16日
    瀏覽(28)
  • 使用 ip2region 獲取用戶的 IP 歸屬地

    使用 ip2region 獲取用戶的 IP 歸屬地

    ip2region 是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,能實現(xiàn)10微秒級別的查詢效率,提供了眾多主流編程語言的xdb數(shù)據(jù)生成和查詢客戶端實現(xiàn)。 每個 ip 數(shù)據(jù)段的 region 信息都固定了格式: 國家|區(qū)域|省份|城市|ISP ,只有中國的數(shù)據(jù)絕大部分精確到了城市,其他國家部分數(shù)

    2024年02月13日
    瀏覽(17)
  • 使用java代碼實現(xiàn)BacNet協(xié)議通過設(shè)備IP與設(shè)備ID同網(wǎng)段獲取到對方設(shè)備數(shù)據(jù)

    使用java代碼實現(xiàn)BacNet協(xié)議通過設(shè)備IP與設(shè)備ID同網(wǎng)段獲取到對方設(shè)備數(shù)據(jù)

    本文章參考了很多博主的案列 收獲很多很感謝他們 我把他們的文章標(biāo)注出來 可能我的方法并不適合你 使用感興趣伙伴們可以的效仿他們的一下 (13條消息) BacNet4j-跨網(wǎng)段-項目運用_森林猿的博客-CSDN博客 (13條消息) BACnet/IP之BACnet4j學(xué)習(xí)java代碼例子屬性讀寫01_夢_殤的博客-CSDN博

    2024年02月05日
    瀏覽(17)
  • 如何高效地查詢IP歸屬地

    如何高效地查詢IP歸屬地

    高效識別IP歸屬地是網(wǎng)絡(luò)安全領(lǐng)域中的一項重要工作。準確地識別IP的歸屬地不僅可以幫助網(wǎng)絡(luò)管理員追蹤和定位潛在的網(wǎng)絡(luò)攻擊者,還可以用于網(wǎng)絡(luò)流量分析、地理定位服務(wù)等方面。 ?以下將介紹幾種高效識別IP歸屬地的方法。 使用IP歸屬地數(shù)據(jù)庫 IP歸屬地數(shù)據(jù)庫是一種存儲

    2024年02月15日
    瀏覽(17)
  • 如何通過美國多IP服務(wù)器優(yōu)化大規(guī)模在線媒體傳輸?

    如何通過美國多IP服務(wù)器優(yōu)化大規(guī)模在線媒體傳輸?

    在數(shù)字化時代,隨著視頻內(nèi)容消費的持續(xù)增長,如何有效地傳輸大規(guī)模在線媒體成為了許多企業(yè)面臨的挑戰(zhàn)。美國多IP服務(wù)器的配置提供了一種有效的解決方案,不僅可以提高傳輸效率,還能優(yōu)化用戶體驗。通過合理配置和管理美國多IP服務(wù)器,可以確保視頻內(nèi)容的高效分發(fā)和

    2024年04月27日
    瀏覽(27)
  • API接口:如何通過使用手機歸屬地查詢

    API接口:如何通過使用手機歸屬地查詢

    ?隨著手機普及率的不斷增加,手機號碼的信息查詢也成為了一個非常實用的功能。本文將介紹如何通過使用手機歸屬地查詢API接口實現(xiàn)查詢手機號碼所在地的功能。 首先,我們需要一個可以查詢手機號碼所在地的API接口。目前市面上有很多免費或付費的API接口可供選擇,如

    2024年02月15日
    瀏覽(22)
  • Java-通過IP獲取真實地址

    Java-通過IP獲取真實地址

    最近寫了一個日志系統(tǒng),需要通過訪問的 IP 地址來獲取真實的地址,并且存到數(shù)據(jù)庫中,我也是在網(wǎng)上看了一些文章,遂即整理了一下供大家參考。 這個是獲取正確 IP 地址的方法,可以直接使用的。 通過以上方法你可以獲取到訪問者的 IP 地址,只有獲取到了 IP 地址,才能

    2024年02月15日
    瀏覽(27)
  • SpringBoot如何通過Nginx代理獲取真實IP

    springboot作為后臺代碼,獲取到的登錄IP是前臺的代理服務(wù)器地址,并不是用戶的真實IP地址,讓我們在做統(tǒng)計的時候無從下手。下面是一個后臺獲取IP地址的類,本質(zhì)上沒有什么問題,問題在于,Nginx給你的就是一個代理之后的地址,所以你當(dāng)然獲取不到真實的地址了。 那么如

    2024年01月17日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包