cari
Rumahtutorial komputerpengetahuan komputerBagaimana untuk menanyakan lokasi IP Douyin (cara memaparkan lokasi IP Douyin)

Bagaimana untuk menanyakan lokasi IP Douyin (cara memaparkan lokasi IP Douyin)

1. Latar Belakang

Editor php, Xiaoxin, akan memperkenalkan kepada anda cara untuk menanyakan lokasi IP Douyin. Apabila menggunakan APP Douyin, kami sering ingin mengetahui di mana alamat IP pengguna tertentu berada. Dengan menanyakan lokasi IP, kami boleh mempelajari maklumat lokasi anggaran pengguna. Jadi, bagaimana untuk menyemak lokasi IP Douyin? Seterusnya, kami akan memberi anda jawapan terperinci.

Seterusnya, mari kita fokus pada bagaimana bahagian belakang Java melaksanakan fungsi atribusi IP Sebenarnya, ia hanya memerlukan dua langkah berikut:

2 Dapatkan antara muka ip pelanggan

Semua orang yang telah melakukan pembangunan web akan memahami sama ada ia. adalah Sama ada pada mudah alih atau PC, antara muka permintaan akan dirangkumkan ke dalam objek HttpServletRequest. Objek ini mengandungi pelbagai maklumat yang diminta oleh klien, seperti alamat permintaan, parameter, data yang diserahkan, dsb.

Jika pelayan mendedahkan IP secara langsung, maka request.getRemoteAddr() boleh mendapatkan IP klien.

Dalam seni bina popular semasa, kebanyakan pelayan tidak mendedahkan alamat IP mereka secara langsung, tetapi memproses permintaan melalui satu atau lebih lapisan proksi terbalik. Alat proksi terbalik yang biasa ialah nginx. Dengan memperkenalkan proksi, terdapat lapisan tambahan antara pelayan dan klien, jadi alamat IP yang diperoleh menggunakan kaedah request.getRemoteAddr() akan menjadi alamat IP pelayan proksi, bukan alamat IP klien. Untuk menjejak alamat IP pelanggan asal, maklumat seperti X-Forwarded-For biasanya ditambahkan pada pengepala pemajuan. Maklumat ini boleh digunakan untuk menentukan sumber sebenar permintaan.

X-Forwarded-For ialah medan yang dibangunkan oleh Squid dan hanya ditambah apabila melalui proksi HTTP atau pelayan pengimbangan beban. Formatnya ialah X-Forwarded-For:client1,proxy1,proxy2. Biasanya, alamat IP pertama ialah IP sebenar pelanggan, dan alamat IP seterusnya ialah IP pelayan proksi yang dilalui. Menurut komen kod di atas, alamat IP pertama boleh dipintas secara langsung. Proxy-Client-IP/WL-Proxy-Client-IP ialah pengepala yang hanya wujud apabila diminta oleh pelayan HTTP Apache. Apabila menggunakan Apache HTTP sebagai proksi, pengepala permintaan Proxy-Client-IP biasanya ditambah dan WL-Proxy-Client-IP ialah pengepala yang ditambahkan oleh pemalam WebLogic. Dalam kes ini, maklumat pengepala juga boleh diperoleh secara langsung. HTTP_CLIENT_IP ialah pengepala permintaan yang mungkin ditambah oleh sesetengah pelayan proksi. X-Real-IP ialah pengepala permintaan yang biasanya digunakan oleh Nginx.

Dalam pembangunan harian, tidak dinyatakan dengan jelas maklumat pengepala mana yang harus digunakan untuk menjejaki klien Anda perlu mencuba satu persatu sehingga anda mendapatnya. Berikut ialah kod yang sepadan:

ini

Salin kod

@Slf4jpublic class IpUtils { rentetan akhir statik peribadi UNKNOWN_VALUE = “tidak diketahui”; Rentetan akhir statik peribadi LOCALHOST_V4 = “127.0.0.0.1” String persendirian LOCALHOST_V4 = “127.0.0.0.1”. = “ 0:0:0:0:0:0:0:1”; String akhir statik peribadi X_FORWARDED_FOR = “X-Forwarded-For”; String akhir statik peribadi String akhir statik peribadi PROXY_CLIENT_IP = “Proksi -IP Klien”; Rentetan akhir statik peribadi WL_PROXY_CLIENT_IP = "IP-Pelanggan-WL-Proxy"; Rentetan akhir statik peribadi HTTP_CLIENT_IP = "HTTP_CLIENT_IP"; Rentetan akhir statik peribadi IP / String akhir statik peribadi IP =_DATA_PATH / /Desktop/ip2region.xdb”;
private static byte[] contentBuff; /*** Dapatkan alamat ip pelanggan * permintaan @param * @return*/ public static String getRemoteHost(HttpServletRequest request) { String ip = request(X_FORWARDED_FOR) StringUtils.isNotEmpty(ip) && !UNKNOWN_VALUE.equalsIgnoreCase(ip)) { // Selepas berbilang proksi terbalik, akan terdapat berbilang nilai ip dan ip pertama ialah indeks int ip sebenar = ip.indexOf(“,”) ; if (index != -1) { return ip.substring(0, index)
; } else { return ip; } }ip = request.getHeader( X_REAL_IP); if (StringUtils.isNotEmp (ip) && !UNKNOWN_VALUE.equalsIgnoreCase(ip)) { return ip; } if (StringUtils.isBlank(ip) ||
UNKNOWN_VALUE.equalsIgnoreCase(ip)) {ip = request.getHeader;PROXY) } if (StringUtils.isBlank(ip) ||UNKNOWN_VALUE.equalsIgnoreCase(ip)) {ip = request.getHeader(WL_PROXY_CLIENT_IP)
;} if (StringUtils.isBlank(ip) ||Ignore.UNKNequalWN {ip = request.getRemoteAddr()
;} if (StringUtils.isBlank(ip) ||UNKNOWN_VALUE.equalsIgnoreCase(ip)) {ip = request.getHeader(HTTP_CLIENT_IP)
; } if. ) ||UNKNOWN_VALUE.equalsIgnoreCase(ip)) {ip = request.getRemoteAddr()
; } return ip.equals(LOCALHOST_V4) : ip;
} }

项目推荐:基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba企业级系统架构底层框架封装,解决业务开发时常见的非功能性需求,防止重复造轮子,方便业务快速开发和企业技术栈框架统一管理。引入组件化的思想实现高内聚低耦合并且高度可配置化,做到可插拔。严格控制包依赖和统一版本管理,做到最少化依赖。注重代码规范和注释,非常适合个人学习和企业使用

Github地址:github.com/plasticene/…

Gitee地址:gitee.com/plasticene3…

微信公众号:Shepherd进阶笔记

交流探讨群:Shepherd_126

3.获取ip归属地

通过上面我们就能获取到客户端用户的ip地址,接下来就可以通过ip解析获取归属地了。

如果我们在网上搜索资料教程,大部分都是说基于各大平台(eg:淘宝,新浪)提供的ip库进行查询,不过不难发现这些平台已经不怎么维护这个功能,现在处于“半死不活”的状态,根本不靠谱,当然有些平台提供可靠的获取ip属地接口,但是收费、收费、收费。

本着作为一个程序员的严谨:“能白嫖的就白嫖,避免出现要买的是你,不会用也是你的尴尬遭遇”。扯远了言归正传,为了寻求可靠有效的解决方案,只能去看看github有没有什么项目能满足需求,果然功夫不负有心人,发现一个宝藏级项目:ip2region,一个准确率 99.9% 的离线 IP 地址定位库,0.0x 毫秒级查询,ip2region.db 数据库只有数 MB的项目,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现,这里只能说:开源真香,开源万岁。

3.1 Ip2region 特性

标准化的数据格式

每个 ip 数据段的 region 信息都固定了格式:国家|区域|省份|城市|ISP,只有中国的数据绝大部分精确到了城市,其他国家部分数据只能定位到国家,其余选项全部是0。

数据去重和压缩

xdb 格式生成程序会自动去重和压缩部分数据,默认的全部 IP 数据,生成的 ip2region.xdb 数据库是 11MiB,随着数据的详细度增加数据库的大小也慢慢增大。

极速查询响应

即使是完全基于 xdb 文件的查询,单次查询响应时间在十微秒级别,可通过如下两种方式开启内存加速查询:

vIndex 索引缓存 :使用固定的 512KiB 的内存空间缓存 vector index 数据,减少一次 IO 磁盘操作,保持平均查询效率稳定在10-20微秒之间。xdb 整个文件缓存:将整个 xdb 文件全部加载到内存,内存占用等同于 xdb 文件大小,无磁盘 IO 操作,保持微秒级别的查询效率。

IP 数据管理框架

v2.0 格式的 xdb 支持亿级别的 IP 数据段行数,region 信息也可以完全自定义,例如:你可以在 region 中追加特定业务需求的数据,例如:GPS信息/国际统一地域信息编码/邮编等。也就是你完全可以使用 ip2region 来管理你自己的 IP 定位数据。

99.9% 准确率

数据聚合了一些知名 ip 到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比经典的纯真 IP 定位准确一些。

ip2region 的数据聚合自以下服务商的开放 API 或者数据(升级程序每秒请求次数 2 到 4 次):

01,>80%,淘宝IP地址库,ip.taobao.com/%5C02,≈10%,GeoIP,geoip.com/%5C03,≈2%,纯真 IP 库,www.cz88.net/%5C

备注:如果上述开放 API 或者数据都不给开放数据时 ip2region 将停止数据的更新服务。

3.2 整合Ip2region客户端进行查询

提供了众多主流编程语言的 xdb 数据生成和查询客户端实现,已经集成的客户端有:java、C#、php、c、python、nodejs、php扩展(php5 和 php7)、golang、rust、lua、lua_c,nginx。这里讲一下java的客户端。

首先我们需要引入依赖:

xml

复制代码

org.lionsoulip2region2.6.5

接下来我们需要先去下载数据文件ip2region.xdb到本地,然后基于数据文件进行查询,下面查询方法文件路径改为你本地路径即可,ip2region提供三种查询方式:

完全基于文件的查询

java

复制代码

import
org.lionsoul.ip2region.xdb.Searcher;import java.io.*;import
java.util.concurrent.TimeUnit;publicclassSearcherTest {publicstaticvoidmain(String[] args) {// 1、创建 searcher 对象StringdbPath=”ip2region.xdb file path”;Searchersearcher=null;try { searcher = Searcher.newWithFileOnly(dbPath); } catch (IOException e) { System.out.printf(“failed to create searcher with `%s`: %s\\n”, dbPath, e);return; }// 2、查询try {Stringip=”1.2.3.4″;longsTime= System.nanoTime();Stringregion= searcher.search(ip);longcost=
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 对象单独使用。 }}

缓存 VectorIndex 索引

我们可以提前从 xdb 文件中加载出来 VectorIndex 数据,然后全局缓存,每次创建 Searcher 对象的时候使用全局的 VectorIndex 缓存可以减少一次固定的 IO 操作,从而加速查询,减少 IO 压力。

java

复制代码

import
org.lionsoul.ip2region.xdb.Searcher;import java.io.*;import
java.util.concurrent.TimeUnit;publicclassSearcherTest {publicstaticvoidmain(String[] args) {StringdbPath=”ip2region.xdb file path”;// 1、从 dbPath 中预先加载 VectorIndex 缓存,并且把这个得到的数据作为全局变量,后续反复使用。byte[] vIndex;try { vIndex =
Searcher.loadVectorIndexFromFile(dbPath); } catch (Exception e) { System.out.printf(“failed to load vector index from `%s`: %s\\n”, dbPath, e);return; }// 2、使用全局的 vIndex 创建带 VectorIndex 缓存的查询对象。 Searcher searcher;try { searcher =
Searcher.newWithVectorIndex(dbPath, vIndex); } catch (Exception e) { System.out.printf(“failed to create vectorIndex cached searcher with `%s`: %s\\n”, dbPath, e);return; }// 3、查询try {Stringip=”1.2.3.4″;longsTime= System.nanoTime();Stringregion= searcher.search(ip);longcost=
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); }// 4、关闭资源 searcher.close();// 备注:每个线程需要单独创建一个独立的 Searcher 对象,但是都共享全局的制度 vIndex 缓存。 }}

缓存整个 xdb 数据

我们也可以预先加载整个 ip2region.xdb 的数据到内存,然后基于这个数据创建查询对象来实现完全基于文件的查询,类似之前的 memory search。

java

复制代码

import
org.lionsoul.ip2region.xdb.Searcher;import java.io.*;import
java.util.concurrent.TimeUnit;publicclassSearcherTest {publicstaticvoidmain(String[] args) {StringdbPath=”ip2region.xdb file path”;// 1、从 dbPath 加载整个 xdb 到内存。byte[] cBuff;try { cBuff =
Searcher.loadContentFromFile(dbPath); } catch (Exception e) { System.out.printf(“failed to load content from `%s`: %s\\n”, dbPath, e);return; }// 2、使用上述的 cBuff 创建一个完全基于内存的查询对象。 Searcher searcher;try { searcher = Searcher.newWithBuffer(cBuff); } catch (Exception e) { System.out.printf(“failed to create content cached searcher: %s\\n”, e);return; }// 3、查询try {Stringip=”1.2.3.4″;longsTime= System.nanoTime();Stringregion= searcher.search(ip);longcost=
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); }// 4、关闭资源 – 该 searcher 对象可以安全用于并发,等整个服务关闭的时候再关闭 searcher// searcher.close();// 备注:并发使用,用整个 xdb 数据缓存创建的查询对象可以安全的用于并发,也就是你可以把这个 searcher 对象做成全局对象去跨线程访问。 }}

3.3 springboot整合示例

首先我们也需要像上面一样引入maven依赖。然后就可以基于上面的查询方式进行封装成工具类了,我这里选择了上面的第三种方式:缓存整个 xdb 数据

ini

复制代码

@Slf4jpublic class IpUtils { Private static final String IP_DATA_PATH = ”
/Users/shepherdmy/Desktop/ip2region.xdb”; private statik bait[] contentBuff; 丽华 static b 到内存。contentBuff =
Searcher.loadContentFromFile(IP_DATA_PATH); } catch (IOException e) { e.printStackTrace(); } } /*** Pertanyaan lokasi berdasarkan ip, format tetap: China|0|Wilayah Zhejiang|Bandar Hangzhou|Telekom * @param ip * @return*/ public statik IpRegion getIpRegion =(String ipRegion null; IpRegion ipRegion = new IpRegion(); cuba {searcher = Searcher.newWithBuffer(contentBuff); String region = searcher.search(ip); = StringUtil[]s.info. “|”); ipRegion.setCountry(info[0]); ipRegion.setArea(info[1]); ipRegion.setProvince(info[2]); ipRegion.setCity(info[3setCity ]); ipRegion.setIsp(info[4]); } tangkap (Pengecualian e) { log.error(“dapat ralat rantau ip: “, e); } akhirnya { jika (pencari != null ) { cuba { searcher.close(); } tangkap (IOException e) { log.error(“close searcher error:”, e); } } } return ipRegion; }}

Atas ialah kandungan terperinci Bagaimana untuk menanyakan lokasi IP Douyin (cara memaparkan lokasi IP Douyin). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:晶发科技. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Alat Penyelesai Penyelesaian Metadata Pencetak Microsoft: Betulkan Bug HP-SmartAlat Penyelesai Penyelesaian Metadata Pencetak Microsoft: Betulkan Bug HP-SmartApr 12, 2025 am 12:50 AM

Bagaimana jika HP Smart dipasang secara automatik pada Windows 11/10/pelayan? Microsoft telah mengeluarkan utiliti dan anda boleh mendapatkan KB5034510: Microsoft Printer Metadata Troubleshooter Tool Online untuk membetulkan bug auto-pemasangan. Teruskan membaca siaran php.cn ini untuk mencari

Cara Memperbaiki Netwlv64.Sys Ralat Skrin Biru di Windows 10/11 - MinitoolCara Memperbaiki Netwlv64.Sys Ralat Skrin Biru di Windows 10/11 - MinitoolApr 12, 2025 am 12:49 AM

Skrin Biru Netwlv64.sys adalah ralat biasa apabila cuba boot sistem operasi Windows 11/10. Bagaimanakah anda dapat menyelesaikan masalah BSOD ini untuk membiarkan PC berfungsi dengan betul? Dalam siaran ini, anda boleh menemui beberapa penyelesaian berguna yang dikumpulkan oleh Php.cn.

Cara mengubah saiz tetingkap di Windows 10Cara mengubah saiz tetingkap di Windows 10Apr 12, 2025 am 12:48 AM

Saiz semula Windows membantu jika anda melakukan lebih daripada satu program pada masa yang sama. Kebanyakan anda mesti cuba mengubah saiz tingkap dalam penggunaan komputer harian anda. Pos Php.cn ini menyusun beberapa kaedah berguna untuk memberitahu anda cara mengubah saiz tetingkap.

Cara Melumpuhkan Soalan Keselamatan untuk Akaun Tempatan Menang 10/11 - MINITOOLCara Melumpuhkan Soalan Keselamatan untuk Akaun Tempatan Menang 10/11 - MINITOOLApr 12, 2025 am 12:47 AM

Adakah anda mencari cara untuk melumpuhkan soalan keselamatan untuk akaun tempatan di Windows 10/11? Dalam siaran ini dari Php.cn, kami akan membimbing anda melalui bagaimana untuk mencegah penggunaan soalan keselamatan untuk akaun tempatan melalui editor dan pendaftaran dasar kumpulan tempatan

Cara Menghapus Passkeys yang Disimpan Untuk Apl dan Laman Web di Windows 11 - MinitoolCara Menghapus Passkeys yang Disimpan Untuk Apl dan Laman Web di Windows 11 - MinitoolApr 12, 2025 am 12:46 AM

Windows 11 Insider Preview Build 23486 mengumumkan untuk mengemukakan ciri baru, Tetapan PassKey, untuk meningkatkan pengalaman menggunakan kata laluan. Anda boleh membuat dan menambah passkeys baru di komputer anda, serta memadamkan mana -mana daripada mereka. Pos Php.cn ini berjalan

Tetap: OneDrive Terdapat masalah menandatangani anda - minitoolTetap: OneDrive Terdapat masalah menandatangani anda - minitoolApr 12, 2025 am 12:45 AM

Adakah anda menderita "OneDrive ada masalah menandatangani anda dalam" kesilapan ketika cuba log masuk ke OneDrive? Sekarang dalam jawatan ini dari php.cn, kami akan membimbing anda melalui cara menyelesaikan masalah log masuk OneDrive ini.

Pembetulan yang tidak berkesudahan - Ikon desktop bertindih pada tingkapPembetulan yang tidak berkesudahan - Ikon desktop bertindih pada tingkapApr 12, 2025 am 12:44 AM

Ikon Desktop Windows 11 dan Windows 10 bertindih? Di sini dalam jawatan ini dari Php.cn, kami akan memberikan anda beberapa penyelesaian yang berguna untuk membantu anda menyingkirkan bug ikon desktop Windows ini.

Bagaimana untuk membetulkan isu 'Dua OneDrive dalam File Explorer'?Bagaimana untuk membetulkan isu 'Dua OneDrive dalam File Explorer'?Apr 12, 2025 am 12:43 AM

OneDrive menunjukkan kepada anda folder dua kali dalam File Explorer dengan ikon OneDrive yang sama. Itulah beberapa pepijat yang berlaku di OneDrive. Anda mungkin mengambil kaedah yang berkesan untuk menetapkan keadaan dua folder OneDrive dalam File Explorer. Catatan ini di php.cn akan membantu anda

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod