html5获取用户登录地址以及访问公网ip
2025-01-29
ip-api 免费IP
IP地址查询
https://whois.pconline.com.cn/ipJson.jsp?json=true
如果你访问https://whois.pconline.com.cn你就会发现会有很多说明
只获取ip
https://ipv4.ipw.cn/api/ip/locate
获取ip后后面的事情就简单了,可以通过ip获取到对应的省市区
pom.xml
<!--ip2region-->
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
首先你需要一个ip2region.db文件,大家可以百度一下,下面是我找到的csdn下载地址,需要的可以私信我
https://download.csdn.net/download/asn4513/20629211?spm=1001.2014.3001.5501
代码实现:
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.lionsoul.ip2region.DataBlock;
import org.lionsoul.ip2region.DbConfig;
import org.lionsoul.ip2region.DbSearcher;
import org.lionsoul.ip2region.Util;
import java.io.File;
/**
* @author ys
* @version 1.0
* @date 2023/2/7 13:43
*/
public class getPublicIp {
/**
* 根据IP获取地址
*
* @return 国家|区域|省份|城市|ISP
*/
public static String getAddress(String ip) {
return getAddress(ip, DbSearcher.BTREE_ALGORITHM);
}
/**
* 根据IP获取地址
*
* @param ip
* @param algorithm 查询算法
* @return 国家|区域|省份|城市|ISP
* @see DbSearcher
* DbSearcher.BTREE_ALGORITHM; //B-tree
* DbSearcher.BINARY_ALGORITHM //Binary
* DbSearcher.MEMORY_ALGORITYM //Memory
*/
@SneakyThrows
public static String getAddress(String ip, int algorithm) {
if (!Util.isIpAddress(ip)) {
// log.error("错误格式的ip地址: {}", ip);
return "";
}
//https://download.csdn.net/download/asn4513/20629211?spm=1001.2014.3001.5501
String dbPath = "D:\\ip2region.db";
File file = new File(dbPath);
if (!file.exists()) {
// log.error("地址库文件不存在");
return "";
}
DbSearcher searcher = new DbSearcher(new DbConfig(), dbPath);
DataBlock dataBlock;
switch (algorithm) {
case DbSearcher.BTREE_ALGORITHM:
dataBlock = searcher.btreeSearch(ip);
break;
case DbSearcher.BINARY_ALGORITHM:
dataBlock = searcher.binarySearch(ip);
break;
case DbSearcher.MEMORY_ALGORITYM:
dataBlock = searcher.memorySearch(ip);
break;
default:
// log.error("未传入正确的查询算法");
return "";
}
searcher.close();
return dataBlock.getRegion();
}
public static void main(String[] args) {
String address = getAddress("119.129.118.190");
System.out.println(address);
String[] split = address.split("\\|");
String city = "";
for (String aSplit : split){
if (aSplit.contains("市")){
city = aSplit;//拿取市级名称
}
System.out.println(aSplit);
}
if (StringUtils.isBlank(city)){
System.out.println("获取失败");
}
}
}
根据ip查询所在国家地区(代码)
参考博客:根据ip查询所在国家地区(国内外ip均适用)