精华内容
下载资源
问答
  • ​ 服务端在接收客户端请求的时候,为了保证系统的安全性,一般在服务端需要进行签名认证或者是对客户端ip进行访问控制,那么进行 ip 控制时,我们首先需要获取客户端请求的真实 ip 地址; 情况1:客户端未经过任何...

    描述:

    ​ 服务端在接收客户端请求的时候,为了保证系统的安全性,一般在服务端需要进行签名认证或者是对客户端ip进行访问控制,那么进行 ip 控制时,我们首先需要获取客户端请求的真实 ip 地址;

    情况1:客户端未经过任何代理,直接访问服务器

    String ip = request.getRemoteAddr() // 直接获取客户端 ip
    

    情况2:客户端经过多级代理,最终访问服务器

    /** 
    * 获取当前网络ip 
    * @param request 请求
    * @return 
    */  
    public String getIpAddr(HttpServletRequest request){  
        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;   
    }
    
    展开全文
  • import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; import java.util.HashMap; imp.
    package com.tao.Util;
     
    import javax.servlet.http.HttpServletRequest;
    import java.net.Inet4Address;
    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
     
     
    public class HostUtil {
        private static String ipstr = "127.0.0.1";
        private static Map<String, String> map = new HashMap();
     
        static {
            map.put("ip", getLinuxLocalIp());
        }
     
        public static String getHostIp() {
            String ip = map.get("ip");
            if (ip == null) {
                String ip1 = getLinuxLocalIp();
                map.put("ip", ip1);
                return ip1;
            }
            return ip;
        }
        
     
        /**
         * 获取Linux下的IP地址
         *
         * @return IP地址
         * @throws SocketException
         */
        private static String getLinuxLocalIp() {
            String ip = "";
            try {
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                    NetworkInterface intf = en.nextElement();
                    String name = intf.getName();
                    if (!name.contains("docker") && !name.contains("lo")) {
                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                            InetAddress inetAddress = enumIpAddr.nextElement();
                            if (!inetAddress.isLoopbackAddress()) {
                                String ipaddress = inetAddress.getHostAddress().toString();
                                if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {
                                    ip = ipaddress;
                                }
                            }
                        }
                    }
                }
            } catch (SocketException ex) {
                ip = "127.0.0.1";
                ex.printStackTrace();
            }
            return ip;
        }
     
        /**
         * 获取请求者的ip地址
         *
         * @param request
         * @return
         */
        public static String getIpAdrress(HttpServletRequest request) {
            String ip = null;
     
            //X-Forwarded-For:Squid 服务代理
            String ipAddresses = request.getHeader("X-Forwarded-For");
            String unknown = "unknown";
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //Proxy-Client-IP:apache 服务代理
                ipAddresses = request.getHeader("Proxy-Client-IP");
            }
     
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //WL-Proxy-Client-IP:weblogic 服务代理
                ipAddresses = request.getHeader("WL-Proxy-Client-IP");
            }
     
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //HTTP_CLIENT_IP:有些代理服务器
                ipAddresses = request.getHeader("HTTP_CLIENT_IP");
            }
     
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //X-Real-IP:nginx服务代理
                ipAddresses = request.getHeader("X-Real-IP");
            }
     
            //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
            if (ipAddresses != null && ipAddresses.length() != 0) {
                ip = ipAddresses.split(",")[0];
            }
     
            //还是不能获取到,最后再通过request.getRemoteAddr();获取
            if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                ip = request.getRemoteAddr();
            }
            return ip;
        }
     
     
    }

     

    展开全文
  • package com.tao.Util; import javax.servlet.... import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; impo...
    package com.tao.Util;
    
    import javax.servlet.http.HttpServletRequest;
    import java.net.Inet4Address;
    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class HostUtil {
        private static String ipstr = "127.0.0.1";
        private static Map<String, String> map = new HashMap();
    
        static {
            map.put("ip", getLinuxLocalIp());
        }
    
        public static String getHostIp() {
            String ip = map.get("ip");
            if (ip == null) {
                String ip1 = getLinuxLocalIp();
                map.put("ip", ip1);
                return ip1;
            }
            return ip;
        }
        
    
        /**
         * 获取Linux下的IP地址
         *
         * @return IP地址
         * @throws SocketException
         */
        private static String getLinuxLocalIp() {
            String ip = "";
            try {
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                    NetworkInterface intf = en.nextElement();
                    String name = intf.getName();
                    if (!name.contains("docker") && !name.contains("lo")) {
                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                            InetAddress inetAddress = enumIpAddr.nextElement();
                            if (!inetAddress.isLoopbackAddress()) {
                                String ipaddress = inetAddress.getHostAddress().toString();
                                if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {
                                    ip = ipaddress;
                                }
                            }
                        }
                    }
                }
            } catch (SocketException ex) {
                ip = "127.0.0.1";
                ex.printStackTrace();
            }
            return ip;
        }
    
        /**
         * 获取请求者的ip地址
         *
         * @param request
         * @return
         */
        public static String getIpAdrress(HttpServletRequest request) {
            String ip = null;
    
            //X-Forwarded-For:Squid 服务代理
            String ipAddresses = request.getHeader("X-Forwarded-For");
            String unknown = "unknown";
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //Proxy-Client-IP:apache 服务代理
                ipAddresses = request.getHeader("Proxy-Client-IP");
            }
    
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //WL-Proxy-Client-IP:weblogic 服务代理
                ipAddresses = request.getHeader("WL-Proxy-Client-IP");
            }
    
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //HTTP_CLIENT_IP:有些代理服务器
                ipAddresses = request.getHeader("HTTP_CLIENT_IP");
            }
    
            if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                //X-Real-IP:nginx服务代理
                ipAddresses = request.getHeader("X-Real-IP");
            }
    
            //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
            if (ipAddresses != null && ipAddresses.length() != 0) {
                ip = ipAddresses.split(",")[0];
            }
    
            //还是不能获取到,最后再通过request.getRemoteAddr();获取
            if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
                ip = request.getRemoteAddr();
            }
            return ip;
        }
    
    
    }

     

    展开全文
  • 随着ASP.NET发展,有不同方式从请求中访问客户端IP地址。WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求。var ip = HttpContext.Current.Request.UserHostAddress;或者只是直接引用当前的Requestvar ip...

    随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址。WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求。

    var ip = HttpContext.Current.Request.UserHostAddress;

    或者只是直接引用当前的Request

    var ip = Request.UserHostAddress;

    但是,这在ASP.NET Core 2.0及更高版本中不起作用。您必须从ConfigureServices方法中的Startup.cs类中注入HttpContextAccessor实例。

    public void ConfigureServices(IServiceCollection services)

    {

    services.AddSingleton();

    services.AddMvc();

    }

    现在我们需要在我们的控制器构造函数中使用它并将其分配给控制器级别声明的变量,这样,它可以从控制器中的所有Actions访问,注意我们这里还使用了NetworkInterface.GetAllNetworkInterfaces()方法来获取服务器上所有网卡的IP地址:

    using Microsoft.AspNetCore.Mvc;

    using Microsoft.AspNetCore.Http;

    using System.Net;

    using System.Net.NetworkInformation;

    using System.Linq;

    using System.Net.Sockets;

    namespace AspNetCoreIP.Controllers

    {

    public class HomeController : Controller

    {

    protected readonly IHttpContextAccessor httpContextAccessor;

    public HomeController(IHttpContextAccessor httpContextAccessor)

    {

    this.httpContextAccessor = httpContextAccessor;

    }

    public IActionResult Index()

    {

    //获取客户端的IP地址

    string clientIpAddress = httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();

    this.ViewData["ClientIpAddress"] = clientIpAddress;

    //获取服务器上所有网卡的IP地址

    NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();

    string serverIpAddresses = string.Empty;

    foreach (var network in networks)

    {

    var ipAddress = network.GetIPProperties().UnicastAddresses.Where(p => p.Address.AddressFamily == AddressFamily.InterNetwork && !IPAddress.IsLoopback(p.Address)).FirstOrDefault()?.Address.ToString();

    serverIpAddresses += network.Name + ":" + ipAddress + "|";

    }

    this.ViewData["ServerIpAddresses"] = serverIpAddresses;

    return View();

    }

    }

    }

    建立MVC视图Index.cshtml,来显示客户端和服务器端的IP地址:

    @{

    Layout = null;

    }

    Index

    客户端IP地址:@this.ViewData["ClientIpAddress"].ToString()

    服务器所有网卡的IP地址:@this.ViewData["ServerIpAddresses"].ToString()

    为什么有时候httpContextAccessor.HttpContext.Connection.RemoteIpAddress获取到的客户端IP地址为空,请参见下文链接:

    https://www.cnblogs.com/OpenCoder/category/1132736.html

    展开全文
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 23、EJB与JAVA BEAN的区别?  Java Bean 是可...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • ④ 在发起网络请求的过程中,需要将域名转化成IP地址,也就是域名解析 ⑤ 得到服务器的响应,此时是二进制的输入流 ⑥ 将二进制的输入流转换成HTML文档,并解析内容(我们要抓取的内容,比如标题)。 ⑦ 将解除出来...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • 欢迎大家推荐自己觉得不错 Java 项目,下面项目排序很大程度是根据当前项目 Star 数量。 如果有码云上比较好项目话,我也会推荐到这里来!另外,我也会推荐少部分过于优秀但是非开源优质 Java 项目。 ...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • System.out.println("当前客户端的IP:"+address.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } } package 实验室项目一; /** * 服务器线程处理类 */ import java.io....
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • Java资源包01

    2016-08-31 09:16:25
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包101

    2016-07-13 10:11:08
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包2

    热门讨论 2013-06-28 09:17:39
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包3

    热门讨论 2013-06-28 09:20:52
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包5

    热门讨论 2013-06-28 09:38:46
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包10

    热门讨论 2013-06-28 10:06:40
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包4

    热门讨论 2013-06-28 09:26:54
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包8

    热门讨论 2013-06-28 09:55:26
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...
  • java开源包9

    热门讨论 2013-06-28 09:58:55
    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

java获取当前请求的服务器ip

java 订阅