也许下面的类,以帮助IP
public enum IpAddressHelper
{
X_FORWARDED_FOR("X-Forwarded-For"),
PROXY_CLIENT_IP("Proxy-Client-IP"),
WL_PROXY_CLIENT_IP("WL-Proxy-Client-IP"),
HTTP_CLIENT_IP("HTTP_CLIENT_IP"),
HTTP_X_FORWARDED_FOR("HTTP_X_FORWARDED_FOR");
private static final Logger LOGGER = LoggerFactory.getLogger(IpAddressHelper.class);
private static final String REMOTE_ADDR = "REMOTE_ADDR";
private String key;
/**
* @param key
*/
IpAddressHelper(String key)
{
this.key = key;
}
/**
* @return the key
*/
public String getKey()
{
return key;
}
public static String getClientIpAddr(HttpServletRequest request)
{
String ip = null;
for (IpAddressHelper header : IpAddressHelper.values())
{
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader(header.getKey());
LOGGER.info("tried:" + header);
}
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getRemoteAddr();
}
return ip;
}
public static String getClientIpAddr(Map<String, String> requestHeaders)
{
String ip = null;
for (IpAddressHelper header : IpAddressHelper.values())
{
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = requestHeaders.get(header.getKey());
LOGGER.info("tried:" + header);
}
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = requestHeaders.get(REMOTE_ADDR);
}
return ip;
}
}
我不认为你所要求的是可能的 - 事实上,我认为它是纯不可能的,因为虚拟机并不知道,和不知道(除非潜藏着安全漏洞)这样的事情。 – fge
我不是在网络接口很好,但它真的不可能的计算机,找到从它的IP地址是用来进入机器从其他机器? – GUZ
“我需要将地址放入消息中(然后在服务器上将其用作响应应发送到的地址)”。为什么?服务器已经知道用什么客户端套接字地址和端口连接到它。 – EJP