通过sohu的接口获取访问的外网ip,或者通过自己的接口通过request获取发起请求处的ip,获取多网卡的ip信息

访问sohu接口获取外网ip

这个方案有个弊端,就是返回的是最外层的路由器的请求ip,不是发起请求的地方的内网ip

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script language="JavaScript">
    alert(JSON.stringify(returnCitySN));
</script>

在这里插入图片描述

自己再后台写个接口从request中获取发起请求处的ip

demo1,可以获取到本地请求的内网ip

String ipAddress = request.getHeader("x-forwarded-for");
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getRemoteAddr();
    if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
        //根据网卡取本机配置的IP
        InetAddress inet=null;
        try {
            inet = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        ipAddress= inet.getHostAddress();
    }
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
    if(ipAddress.indexOf(",")>0){
        ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
    }
}
return ipAddress;

demo2,下面的方式如果是本地请求的话会获取不到ip

String ipAddress = request.getHeader("X-Real-IP");
if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("x-forwarded-for");
}

if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("x-Forwarded-For");
}

if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("Proxy-Client-IP");
}

if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("WL-Proxy-Client-IP");
}

if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("HTTP_CLIENT_IP");
}


if(StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("HTTP_X-FORWARDED-FOR");
}

return ipAddress;

获取多网卡的ip信息

//获取多网卡的ip信息
Enumeration<NetworkInterface> interfaces=null;
interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
    NetworkInterface ni = interfaces.nextElement();
    Enumeration<InetAddress> addresss = ni.getInetAddresses();
    while(addresss.hasMoreElements()){
        InetAddress nextElement = addresss.nextElement();
        String hostAddress = nextElement.getHostAddress();
        //跳过非IPV4的网卡ip信息
        if(StringUtils.isEmpty(hostAddress) || hostAddress.contains(":")){
            continue;
        }
        System.out.println("本机IPV4地址为:" +hostAddress);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uni-app中获取IP地址的方法有多种,其中一种方法是使用引入外部JS的方式来获取。你可以在浏览器中使用以下代码来获取IP信息: ``` <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> <script type="text/javascript"> console.log(returnCitySN["cip"], returnCitySN["cname"]) </script> ``` 这段代码会通过引入http://pv.sohu.com/cityjson?ie=utf-8这个外部JS文件来获取IP地址信息。你可以将这段代码放在你的uni-app项目中的某个页面中的<script>标签中,然后在浏览器中打开该页面,就能在控制台中看到IP信息的输出。 另外,如果你想在uni-app中直接获取IP地址,你可以使用utils.js文件中定义的getIPs方法。这个方法会获取局域网中的所有IP地址。具体的代码如下: ``` /**utils.js文件内容**/ const fun = 'function'; /**获取局域网所有ip**/ export function getIPs(success){ var IPUtils = plus.android.newObject("io.dcloud.HBuilder.ip.IPUtils"); //获取arp地址及mac信息 var hevent = plus.android.implements( "io.dcloud.HBuilder.ip.IPUtils$OnScanListener", { "scan":function(resultMap){ if(success && typeof success === fun){ success(JSON.stringify(resultMap)) } } }); //设置接口信息 plus.android.invoke(IPUtils,'setOnScanListener',hevent); //刷新arp缓存 plus.android.invoke(IPUtils,'startScan'); } ``` 你可以将这段代码放在utils.js文件中,然后在你的uni-app项目中的某个页面中引入并调用getIPs方法来获取局域网中的所有IP地址。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android/uni-app读取局域网所有IP&MAC](https://blog.csdn.net/qq2523208472/article/details/103156623)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [uniapp如何获取IP地址](https://blog.csdn.net/dwb123456123456/article/details/116296138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值