java获得访问者ip,为啥获得的值是ip "0:0:0:0:0:0:0:1" (id=114)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java获得访问者ip,为啥获得的值是ip "0:0:0:0:0:0:0:1" (id=114)相关的知识,希望对你有一定的参考价值。
public static String getIpAddr(HttpServletRequest request)
String ip = request.getHeader("X-Real-IP");
if(!StringUtils.isBlank(ip)&&!"unknown".equalsIgnoreCase(ip))
return ip;
ip = request.getHeader("X-Forwarded-For");
if(!StringUtils.isBlank(ip)&& !"unknown".equalsIgnoreCase(ip))
int index = ip.indexOf(',');
if(index != -1)
return ip.substring(0, index);
else
return ip;
return request.getRemoteAddr();
而且如果你本机通过localhost、127.0.0.1和本机真实地址访问时获取到的ip也有区别,有兴趣可以试试追问
吧localhos换成127.0.0.1就变成了IPV4
本回答被提问者和网友采纳 参考技术B 这个太难老 参考技术C 这个太难老 参考技术D 这是本机访问才会得到的ipv6结果java获得IP地址
我想用java获得本机的IP地址,请高手指教。
我用的是宽带拨号上网,在dos窗口中用ipconfig命令输出如下:
C:\Documents and Settings\ASUS>ipconfig
Windows IP Configuration
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 10.1.41.101
Subnet Mask . . . . . . . . . . . : 255.0.0.0
Default Gateway . . . . . . . . . : 10.1.41.1
Ethernet adapter 无线网络连接:
Media State . . . . . . . . . . . : Media disconnected
Ethernet adapter SoftEther Virtual LAN Connection:
Media State . . . . . . . . . . . : Media disconnected
PPP adapter 宽带连接:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 121.229.6.189
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 121.229.6.189
用一般的java方法输出的是本地连接的ip:10.1.41.101,而我需要的是宽带连接的ip:121.119.6.189。
请问各位大侠,有什么java方法可以解决这个问题?
用java的方法在程序中获得本机IP地址,不是人动手查...
你可以用这个方法读取你所需要的本机IP地址
=======================================================
J2SE5.0新特性之ProcessBuilder
这个例子使用了J2SE5.0的ProcessBuilder类执行外部的程序,相对于 Runtime.exec ,它更方便,可以设置环境变量等。这里使用它在windows下读取物理网卡的地址
package com.kuaff.jdk5package;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ProcessBuilderShow
public static List getPhysicalAddress()
Process p = null;
//物理网卡列表
List address = new ArrayList();
try
//执行ipconfig /all命令
p = new ProcessBuilder("ipconfig", "/all").start();
catch (IOException e)
return address;
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
//读取进程输出值
InputStream in = p.getInputStream();
try
while (in.read(b)>0)
sb.append(new String(b));
catch (IOException e1)
finally
try
in.close();
catch (IOException e2)
//以下分析输出值,得到物理网卡
String rtValue = sb.substring(0);
int i = rtValue.indexOf("Physical Address. . . . . . . . . :");
while(i>0)
rtValue = rtValue.substring(i + "Physical Address. . . . . . . . . :".length());
address.add(rtValue.substring(0,18));
i = rtValue.indexOf("Physical Address. . . . . . . . . :");
return address;
public static void main(String[] args)
List address = ProcessBuilderShow.getPhysicalAddress();
for(String add:address)
System.out.printf("物理网卡地址:%s%n", add);
参考技术A 简单实现代码如下:
js获取来源页地址方法:
var url = document.referrer;
document.write(url);
jsp获取来源页地址方法:
String url = request.getHeader(”Referer”);
System.out.println(url);
对比两个方法:
1.js里是”referrer”,jsp里是”referer”,前者比后者多一个”r”;
2.前者如直接输入网址,则显示为空,后者显示null;
import java.net.*;
public class ip5
public static void main(String args[]) throws Exception
String ip = InetAddress.getLocalHost().getHostAddress();
System.out.println(ip);
参考技术B ipconfig -all 试试 参考技术C 我晕,
直接InetAddress.getLocalHost()不就够了,
不懂的去看API,不要提这样的问题了,浪费分啊 参考技术D request里面有这个方法,直接获取系统当前IP
以上是关于java获得访问者ip,为啥获得的值是ip "0:0:0:0:0:0:0:1" (id=114)的主要内容,如果未能解决你的问题,请参考以下文章