获取服务器访问者IP

从今年7月24号,没有玩游戏到现在不知不觉(还是一个来月啊,这记性啊,我还以为过了老长时间了呢!)。真的像那个相对论中所说的那样啊,冬天的火堆,夏天的火炉,同样的时间,在第四维度是不一样的世界。好了,笔者利用15分钟的时间,探究一下怎么获取服务器访问者的IP地址。

方法一、java通过request获取

     /**
            * 获取当前访问者IP地址
            * @param request 请求
            * @return IP地址
            */
        public static String getVisitIp(HttpServletRequest request) {
            /**
             * 在一般情况下使用Request.getRemoteAddr()即可,
             * 但是经过nginx等反向代理软件后,这个方法会失效。
             * 本方法先从Header中获取X-Real-IP,
             * 如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
             * 如果还不存在则调用Request .getRemoteAddr()
             */
            String ip = request.getHeader("X-Real-IP");
            /**org.apache.commons.lang.StringUtils处理字符串类
             * IsEmpty/IsBlank – 检查字符串是否有内容。
             * IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable – 判断字符是否在字符串中。
             */
            if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                return ip;
            }
            ip = request.getHeader("X-Forwarded-For");
            if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                // 多次反向代理后会有多个IP值,第一个为真实IP。
                int index = ip.indexOf(‘,‘);
                if (index != -1) {
                    return ip.substring(0, index);
                } else {
                    return ip;
                }
            } else {
                return request.getRemoteAddr();
            }
        }

调用:

        HttpServletRequest request = ServletActionContext.getRequest();
    String IP = AllServiceIsHere.getVisitIp(request);
    System.err.println(IP);

走你:

方法二、java利用request逐步去除代理获取

public static String getIp(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();
        }
        return ip;
    }
**同样调用:**

HttpServletRequest request = ServletActionContext.getRequest();
String IP = AllServiceIsHere.getIp(request);
System.err.println(IP);

方法三、通过js获取(IE适配哦,还需要ActiveX控件支持,得到的什么鬼还没看明白)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/jquery.js" ></script>
</head>
<body>
<div id="20180911"></div>
</body>
<script language=javascript>
var wshNetwork = new ActiveXObject("WScript.Network");
$("#20180911").html("域名 = "+ wshNetwork.UserDomain+"<br/>"

  • "计算机名 = "+ wshNetwork.ComputerName+"<br/>"
  • "登录用户名 = "+ wshNetwork.UserName+"<br/>"
    )
    </script>
    </html>

啊,还是走后台吧。省心!

原文地址:http://blog.51cto.com/13479739/2174036

时间: 2024-08-16 14:07:39

获取服务器访问者IP的相关文章

Java根据HttpServletRequest请求获取服务器的IP地址

以下总结了两种根据HttpServletRequest请求获取发出请求浏览器客户端所在服务器的IP地址方法: 代码: import javax.servlet.http.HttpServletRequest; /** * 根据HttpServletRequest请求获取发出请求浏览器客户端所在服务器的IP地址 * @author [] * */ public class IPUtil { /* * 第一种方法 */ public String getIpAddr(HttpServletReque

通过抓包获取服务器的IP地址

问题描述:一台服务器安装了winserver2003系统,经过漫长的加电启动,能进入到win2003的登录界面,提示ctrl+alt+del登录界面,但是发现键盘失灵了,无法键入ctrl+alt+del,更换键盘重启服务器之后也不管用!想通过网口远程登录,但是不记得网口的IP地址了! 问题分析:键盘失灵应该是主板上的USB模块坏了,这个短时间无法修复远程登录不知道IP地址,这个有就点可惜了,想想有没有解决办法呢? 解决问题:使用网线一头接Gb网口,另一头接笔记本网卡,如果使用IP扫描软件扫描IP

asp.net获取URL和IP地址

(转自:http://www.cnblogs.com/JuneZhang/archive/2010/11/26/1888863.html) HttpContext.Current.Request.Url.ToString() 并不可靠.如果当前URL为 http://localhost/search.aspx?user=http://csharp.xdowns.com&tag=%BC%BC%CA%F5 通过HttpContext.Current.Request.Url.ToString()获取到

python优雅获取本机 IP 方法

见过很多获取服务器本地IP的代码,个人觉得都不是很好.从网上搜索到一个靠谱的脚本,分享一下! 通过 UDP 获取本机 IP,目前见过最优雅的方法 这个方法是目前见过最优雅获取本机服务器的IP方法了.没有任何的依赖,也没有去猜测机器上的网络设备信息. 而且是利用 UDP 协议来实现的,生成一个UDP包,把自己的 IP 放如到 UDP 协议头中,然后从UDP包中获取本机的IP. 这个方法并不会真实的向外部发包,所以用抓包工具是看不到的.但是会申请一个 UDP 的端口,所以如果经常调用也会比较耗时的,

Python 优雅获取本机 IP 方法

见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.i

如何获取陌生服务器的IP地址

如何获取陌生服务器的IP地址 一.背景 在机房里有一台生产系统的服务器,该服务器有带外管理卡,但是管理卡的IP地址被其他同事修改过,现在已经不能找到历史记录,如果要实现这台服务器的带外管理功能,就必须知道服务器的带外管理卡IP地址,怎么解决呢? 二.解决办法 1.可以对这台服务器进行重启操作,然后登陆设备后台进行查找或修改,这种方式目前不可行. 2.可以通过抓包的方式实现,用一台笔记本随便配置一个IP地址如172.16.1.1,然后通过网线与这台服务器的带完管理卡直连,启用抓包软件进行转包. (

c#中获取服务器IP,客户端IP以及网卡物理地址

1 客户端ip: 2 Request.ServerVariables.Get("Remote_Addr").ToString(); 3 客户端主机名: 4 Request.ServerVariables.Get("Remote_Host").ToString(); 5 客户端浏览器IE: 6 Request.Browser.Browser; 7 客户端浏览器 版本号: 8 Request.Browser.MajorVersion; 9 客户端操作系统: 10 Req

nginx做反向负载均衡,后端服务器获取真实客户端ip

开门见山,操作如下: 首先,在前端nginx上需要做如下配置: location / { proxy_pass http://test1; proxy_set_hearder host $host; proxy_set_header X-Real_IP $remoute_addr; proxy_set_header $proxy_add_x_forwarded_for; }; nginx会在把请求转向后台real-server前把http报头中的ip地址进行替换:这样操作完成后,real-ser

python之获取微信服务器的ip地址

# -*- coding: cp936 -*- #PYTHON 27 #xiaodeng #获取微信服务器的ip地址 import urllib url='https://api.weixin.qq.com/cgi-bin/getcallbackip' data={'access_token':'VchuOKNr8X9tZVDrY_yG9qiJus_1nO1a7uT_iwWVwgGFdzPhPyaqreTE_qMKPas4SwRNif5k0A1zVw6Y9eTPI4CAYiUwpJvHdBt4f