用Java获取本机IP或者请求用户的真正IP地址
一、在Web请求中获取请求用户的IP地址
public static String getUserRealIP(HttpServletRequest request) throws UnknownHostException {
String ip = "";
// 有的user可能使用代理,为处理用户使用代理的情况,使用x-forwarded-for
if (request.getHeader("x-forwarded-for") == null) {
ip = request.getRemoteAddr();
} else {
ip = request.getHeader("x-forwarded-for");
}
if ("127.0.0.1".equals(ip)) {
// 获取本机真正的ip地址
ip = InetAddress.getLocalHost().getHostAddress();
}
return ip;
}
二、获取本机IP地址和主机名
import java.util.*;
import java.net.*;
public class getMyIP
{
public static void main(String[] args) {
String ip = null;
String host = null;
try{
InetAddress ia = InetAddress.getLocalHost();
host = ia.getHostName();//获取计算机名字
ip = ia.getHostAddress();//获取IP
} catch(UnknownHostException e) {
e.printStackTrace();
}
System.out.println(host);
System.out.println(IP);
}
}
三、网上搜索的方法
import javax.servlet.http.HttpServletRequest; /**
* 自定义访问对象工具类
*
* 获取对象的IP地址等信息
* @author X-rapido
*
*/
public class CusAccessObjectUtil { /**
* 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
*
* 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
* 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
*
* 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
* 192.168.1.100
*
* 用户真实IP为: 192.168.1.110
*
* @param request
* @return
*/
public static String getIpAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
if("127.0.0.1".equals(ip)||"0:0:0:0:0:0:0:1".equals(ip)){
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ip= inet.getHostAddress();
}
}
return ip;
} }
四、扩展知识
Java获取客户端请求电脑IP,操作系统等等各种信息
HttpServletRequest request = ServletActionContext.getRequest();
System.out.println("浏览器基本信息:"+request.getHeader("user-agent"));
System.out.println("客户端系统名称:"+System.getProperty("os.name"));
System.out.println("客户端系统版本:"+System.getProperty("os.version"));
System.out.println("客户端操作系统位数:"+System.getProperty("os.arch"));
System.out.println("HTTP协议版本:"+request.getProtocol());
System.out.println("请求编码格式:"+request.getCharacterEncoding());
System.out.println("Accept:"+request.getHeader("Accept"));
System.out.println("Accept-语言:"+request.getHeader("Accept-Language"));
System.out.println("Accept-编码:"+request.getHeader("Accept-Encoding"));
System.out.println("Connection:"+request.getHeader("Connection"));
System.out.println("Cookie:"+request.getHeader("Cookie"));
System.out.println("客户端发出请求时的完整URL"+request.getRequestURL());
System.out.println("请求行中的资源名部分"+request.getRequestURI());
System.out.println("请求行中的参数部分"+request.getRemoteAddr());
System.out.println("客户机所使用的网络端口号"+request.getRemotePort());
System.out.println("WEB服务器的IP地址"+request.getLocalAddr());
System.out.println("WEB服务器的主机名"+request.getLocalName());
System.out.println("客户机请求方式"+request.getMethod());
System.out.println("请求的文件的路径"+request.getServerName());
System.out.println("请求体的数据流"+request.getReader());
BufferedReader br=request.getReader();
String res = "";
while ((res = br.readLine()) != null) {
System.out.println("request body:" + res);
}
System.out.println("请求所使用的协议名称"+request.getProtocol());
System.out.println("请求中所有参数的名字"+request.getParameterNames());
Enumeration enumNames= request.getParameterNames();
while (enumNames.hasMoreElements()) {
String key = (String) enumNames.nextElement();
System.out.println("参数名称:"+key);
}
五、在本机上获取计算机信息
public void getIP(){
try {
InetAddress address = InetAddress.getLocalHost();
String ip = address.getHostAddress().toString();//获取本机IP
String hostName = address.getHostName().toString();//获取本机计算机名称
System.out.println("ip is:"+ip);
System.out.println("host name is:"+hostName);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
用Java获取本机IP或者请求用户的真正IP地址的更多相关文章
- java获取本机IP地址
转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...
- java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了
本文参考https://blog.csdn.net/u011809209/article/details/77236602 本文参考https://blog.csdn.net/yinshuomail/ ...
- 详谈再论JAVA获取本机IP地址
首先,你如果搜索“JAVA获取本机IP地址”,基本上搜到的资料全是无用的.比如这篇:http://www.cnblogs.com/zrui-xyu/p/5039551.html实际上的代码在复杂环境下 ...
- java获取本机名称、IP、MAC地址和网卡名称
java获取本机名称.IP.MAC地址和网卡名称 摘自:https://blog.csdn.net/Dai_Haijiao/article/details/80364370 2018年05月18日 1 ...
- Java获取本机MAC地址[转]
原文地址:https://www.cnblogs.com/hxsyl/p/3422191.html Java获取本机MAC地址 为什么写这个呢?因为前几天看见网上有采用windows命令获取局域网 ...
- java获取本机机器名
java获取本机机器名 InetAddress.getLocalHost().getHostName().toString();
- JAVA获取本机IP和Mac地址
在项目中,时常需要获取本机的Ip或是Mac地址,进行身份和权限验证,本文就是通过java代码获取ip和Mac. package com.svse.query;import java.net.In ...
- Java获取本机IP
try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); whil ...
- Java 获取本机局域网内IP
主要涉及NetworkInterface.Enumeration.InetAddress等类 /* 获取本机网内地址 */ public static InetAddress getInet4Addr ...
- java模拟http的Get/Post请求,并设置ip与port代理
本文涉及3个基本点: 1.因为很多公司的内网都设有代理,浏览器通过ip与port上网,而java代码模拟http get方式同样需要外网代理: 2.Java实现http的Get/Post请求代码: 3 ...
随机推荐
- python web服务器--WSGI/ASGI协议--web框架,三者之间的关系
在 Python Web 开发中,Web 服务器.WSGI/ASGI 协议 和 Web 框架 是三个核心组成部分,它们共同协作以实现完整的 Web 应用程序.以下是三者之间的关系和作用的详细讲解: 1 ...
- mysql-installer-community-8.0.19.0.msi 的自定义安装与卸载
一.双击运行安装包执行安装 1.选择Custom,该种方式可以设置安装位置,仅安装所需的组件,点击Next 2.选择需要的组件,点击Advanced Options 3.设置安装位置,点击OK 4.点 ...
- 堆排序(topk 问题)(NB)
博客地址:https://www.cnblogs.com/zylyehuo/ # _*_coding:utf-8_*_ # 比较排序 import random def sift(li, low, h ...
- 数据质量框架QUalitis浅尝使用
数据质量管理平台(微众银行)Qualitis+Linkis (一)Qualitis是一个数据质量管理系统,用于监控数据质量. 其功能包括: 数据质量模型定义 数据质量结果可视化 可监控 数据质量管理服 ...
- Linux系统查看CPU使用率、内存使用率、磁盘使用率
一.查看CPU使用率1. top 命令[root@sss ~]# toptop - 16:54:38 up 7 days, 5:13, 3 users, load average: 0.00, ...
- 从零开始:基于 PyTorch 的图像分类模型
摘要:本文详细记录了使用 PyTorch 从零搭建一个图像分类模型的过程,涵盖卷积神经网络(CNN).数据预处理.模型设计.训练调试与优化.通过对 CIFAR-10 数据集的处理实践,结合经典文献和 ...
- 事件监听、焦点--java进阶day03
1.事件 按钮是组件,点击后就会重新游戏 对于这种点击了组件之后,有逻辑触发的操作,就是事件 2.事件中的专有名词 绑定监听也就是绑定监视,是真正组织代码逻辑的地方 要有绑定监听就需要监听器,今天学习 ...
- 【Linux】5.2 Shell变量
Shell变量 1. shell变量简介 Linux Shell的变量分为,系统变量和用户自定义变量 系统变量: $HOME. $PWD. $SHELL. $USER等等 显示当前shell中所有变量 ...
- VScode前端代码编辑器:修改默认打开的浏览器和代码提示设置
一.修改默认打开的浏览器 二.代码提示设置
- elemengui分页
<!-- 分页模块 --> <template> <div class="block" style="margin-top:20px&quo ...