转自:http://www.cnblogs.com/xjh5201314/p/6591174.html
1 public static String getIpAddress(HttpServletRequest request){
2
3 String ipAddress = request.getHeader("x-forwarded-for");
4
5 if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
6 ipAddress = request.getHeader("Proxy-Client-IP");
7 }
8 if (ipAddress == null || ipAddress.length() == 0 || "unknow".equalsIgnoreCase(ipAddress)) {
9 ipAddress = request.getHeader("WL-Proxy-Client-IP");
10 }
11 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
12 ipAddress = request.getRemoteAddr();
13
14 if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
15 //根据网卡获取本机配置的IP地址
16 InetAddress inetAddress = null;
17 try {
18 inetAddress = InetAddress.getLocalHost();
19 } catch (UnknownHostException e) {
20 e.printStackTrace();
21 }
22 ipAddress = inetAddress.getHostAddress();
23 }
24 }
25
26 //对于通过多个代理的情况,第一个IP为客户端真实的IP地址,多个IP按照','分割
27 if(null != ipAddress && ipAddress.length() > 15){
28 //"***.***.***.***".length() = 15
29 if(ipAddress.indexOf(",") > 0){
30 ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
31 }
32 }
33
34 return ipAddress;
35 }
方法最下方的if()语句,是为了防止使用tomcat服务器,在本地测试的时候,得出的ip地址是127.0.0.1的问题。
引用自:多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
分享到:
相关推荐
在这种情况下,原始的客户端IP地址信息被记录在HTTP请求头中的`X-Forwarded-For`字段里。 #### 三、解决方案 为了准确获取客户端的真实IP地址,我们可以采用以下几种方法: ##### 方法一:基本实现 首先,检查...
在这个"java socket服务端和客户端"的项目中,我们可以探讨以下几个关键知识点: 1. **Socket类和ServerSocket类**: - `Socket`类代表了网络上的一个连接,它用于建立客户端到服务器的连接,并进行数据传输。通过...
在Java编程中,获取服务器的IP地址和MAC地址是常见的需求,特别是在网络通信和系统管理中。本篇文章将详细介绍如何使用Java实现这一功能,包括针对单网卡和多网卡环境的情况。 首先,获取服务器的IP地址通常涉及到`...
在实际使用中,Java客户端通常具有简洁的用户界面,用户只需输入服务端的IP地址和端口号,以及认证信息,就能实现远程连接。 在实际应用中,VNC常用于系统维护、技术支持、远程办公等场景。例如,IT管理员可以通过...
- 使用`Socket`类创建一个连接到指定IP地址和端口的客户端,通过`Socket(String host, int port)`构造方法指定服务器的地址和端口。 - 同样通过`Socket`对象的输入流和输出流进行数据交互。 在这个实例中,采用...
在Java编程环境中,服务端和客户端之间的文件传输是常见的需求,尤其在分布式系统或网络应用中。本示例主要涉及的是使用Java的Socket编程来实现这一功能。Socket编程是网络编程的基础,它允许两个网络应用程序之间...
客户端创建`Socket`对象,指定服务器的IP地址和端口号,然后获取输出流以发送数据。一旦数据被写出,服务器端就需要接收并解析这些数据。 在服务器端,我们需要创建一个`ServerSocket`来监听特定端口上的连接请求:...
在Java编程中,服务器端和客户端的交互是网络应用程序的核心部分。这个实例展示了如何通过Java实现这一过程。在这个实例中,我们有两个主要组件:服务器端(Server)和客户端(Client)。下面将详细介绍这两个组件...
在压缩包文件“src”中,可能包含了服务端和客户端的Java源代码文件,你可以查看这些文件以获取更具体的实现细节,包括异常处理、数据编码解码、关闭流和资源释放等。 总的来说,Java TCP/IP通信涉及网络编程的基本...
Java Socket服务端与客户端编程是Java网络编程中的基础部分,主要用于实现两台计算机之间的通信。在本场景中,客户端向服务器发送一个字符串,服务器接收到这个字符串后将其转化为大写并回显。以下是对这个过程的...
在IT行业中,网络编程是不可或缺的一部分,特别是在Java领域。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。Java的Socket类提供了对TCP协议的支持,使得开发者能够构建服务器端...
使用TIdTCPClient组件,设置其Host属性为JAVA服务端的IP地址,Port属性为服务端监听的端口号,然后调用Connect方法建立连接。 2. ** 数据编码与解码**:由于Delphi和Java可能使用不同的数据序列化方式,如Delphi常用...
在本实例中,我们有两个关键文件:`server.java`和`client.java`,分别代表服务端和客户端的实现。 **服务端(server.java)** 服务端通常扮演着等待连接、接收请求并处理这些请求的角色。在Java中,我们可以使用`...
在Java中,实现TCP服务端和客户端通信主要涉及到`java.net.Socket`和`java.net.ServerSocket`这两个类。服务端使用`ServerSocket`创建监听特定端口的对象,等待客户端的连接请求。一旦有客户端连接,服务端就会创建...
Java Socket服务端和客户端编程是Java网络编程中的核心部分,主要涉及TCP/IP协议栈和客户机/服务器(C/S)架构。TCP/IP协议是互联网通信的基础,它由多个层次组成,其中IP层负责主机定位和路由,而TCP层提供可靠的...
本篇将深入讲解如何在Android中实现一个简单的UDP服务端与客户端的通信实例,并附带获取本地IP地址的代码。 首先,理解UDP协议的基础特性是至关重要的。UDP是一种无连接的协议,它不建立连接,而是直接将数据包发送...
在多线程服务端,我们可以通过`DatagramPacket`中的`getSocketAddress()`方法获取发送数据的客户端的`SocketAddress`,进一步得到客户端的IP地址。根据IP地址,服务端可以区分不同的客户端并做出相应的处理。 在...
在IT行业中,Java服务端与Android客户端之间的通信是构建分布式应用程序的关键部分。这种通信机制使得移动设备能够与服务器进行交互,获取数据、执行任务或更新应用程序的状态。在本场景中,我们关注的是通过Socket...
客户端则通过建立Socket连接到服务端的IP地址和端口,从而实现数据交换。 服务端的实现过程如下: 1. 导入必要的Socket库,例如在Java中,使用`java.net.ServerSocket`和`java.net.Socket`类。 2. 创建ServerSocket...