关闭

Java之——获取来访者的各种信息

标签: javasystem
1733人阅读 评论(0) 收藏 举报
分类:

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/49890455

不多说,不废话,直接上代码,大家都懂的

package com.cdsmartlink.utils.system;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

/**
 * 获取系统的信息
 * @author liuyazhuang
 *
 */
public final class SystemUtils {
	/**
     * 获取访问者IP
     * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
     * 
     * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
     * 如果还不存在则调用Request .getRemoteAddr()。
     * @param request
     * @return
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("X-Real-IP");
        if (ip!= null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) {
            return ip;
        }
        ip = request.getHeader("X-Forwarded-For");
        if (ip!= null && !"".equals(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();
        }
    }
    
    /**
     * 获取来访者的浏览器版本
     * @param request
     * @return
     */
    public static String getRequestBrowserInfo(HttpServletRequest request){
		String browserVersion = null;
		String header = request.getHeader("user-agent");
		if(header == null || header.equals("")){
		   return "";
		 }
        if(header.indexOf("MSIE")>0){
            browserVersion = "IE";
        }else if(header.indexOf("Firefox")>0){
            browserVersion = "Firefox";
        }else if(header.indexOf("Chrome")>0){
            browserVersion = "Chrome";
        }else if(header.indexOf("Safari")>0){
            browserVersion = "Safari";
        }else if(header.indexOf("Camino")>0){
            browserVersion = "Camino";
        }else if(header.indexOf("Konqueror")>0){
            browserVersion = "Konqueror";
        }
        return browserVersion;
    }

    /**
     * 获取系统版本信息
     * @param request
     * @return
     */
    public static String getRequestSystemInfo(HttpServletRequest request){
	  String systenInfo = null;
	  String header = request.getHeader("user-agent");
	  if(header == null || header.equals("")){
	   return "";
	  }
        //得到用户的操作系统
        if (header.indexOf("NT 6.0") > 0){
            systenInfo = "Windows Vista/Server 2008";
        } else if (header.indexOf("NT 5.2") > 0){
            systenInfo = "Windows Server 2003";
        } else if (header.indexOf("NT 5.1") > 0){
            systenInfo = "Windows XP";
        } else if (header.indexOf("NT 6.0") > 0){
            systenInfo = "Windows Vista";
        } else if (header.indexOf("NT 6.1") > 0){
            systenInfo = "Windows 7";
        } else if (header.indexOf("NT 6.2") > 0){
            systenInfo = "Windows Slate";
        } else if (header.indexOf("NT 6.3") > 0){
            systenInfo = "Windows 9";
        } else if (header.indexOf("NT 5") > 0){
            systenInfo = "Windows 2000";
        } else if (header.indexOf("NT 4") > 0){
            systenInfo = "Windows NT4";
        } else if (header.indexOf("Me") > 0){
            systenInfo = "Windows Me";
        } else if (header.indexOf("98") > 0){
            systenInfo = "Windows 98";
        } else if (header.indexOf("95") > 0){
            systenInfo = "Windows 95";
        } else if (header.indexOf("Mac") > 0){
            systenInfo = "Mac";
        } else if (header.indexOf("Unix") > 0){
            systenInfo = "UNIX";
        } else if (header.indexOf("Linux") > 0){
            systenInfo = "Linux";
        } else if (header.indexOf("SunOS") > 0){
            systenInfo = "SunOS";
        }
        return systenInfo;
	 }
    
    /**
     * 获取来访者的主机名称
     * @param ip
     * @return
     */
    public static String getHostName(String ip){
    	InetAddress inet;
    	try {
			inet = InetAddress.getByName(ip);
			return inet.getHostName();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
    	return "";
    } 
    
    /**
     * 命令获取mac地址
     * @param cmd
     * @return
     */
    private static String callCmd(String[] cmd) {
	  String result = "";
	  String line = "";
	    try {
	        Process proc = Runtime.getRuntime().exec(cmd);
	        InputStreamReader is = new InputStreamReader(proc.getInputStream());
	        BufferedReader br = new BufferedReader (is);
	        while ((line = br.readLine ()) != null) {
	             result += line;
	        }
	   }catch(Exception e) {
	        e.printStackTrace();
	   }
	      return result;
    }
    	/**
    	 *
    	 *
    	 *
    	 * @param cmd
    	 *            第一个命令
    	 *
    	 * @param another
    	 *            第二个命令
    	 *
    	 * @return 第二个命令的执行结果
    	 *
    	 */

    	private static String callCmd(String[] cmd,String[] another) {
    	   String result = "";
    	   String line = "";
    	   try {
    	      Runtime rt = Runtime.getRuntime();
    	      Process proc = rt.exec(cmd);
    	      proc.waitFor(); // 已经执行完第一个命令,准备执行第二个命令
    	      proc = rt.exec(another);
    	      InputStreamReader is = new InputStreamReader(proc.getInputStream());
    	      BufferedReader br = new BufferedReader (is);
    	      while ((line = br.readLine ()) != null) {
    	         result += line;
    	      }
    	   }catch(Exception e) {
    	        e.printStackTrace();
    	   }
    	      return result;
    	}

    	/**
    	 *
    	 *
    	 *
    	 * @param ip
    	 *            目标ip,一般在局域网内
    	 *
    	 * @param sourceString
    	 *            命令处理的结果字符串
    	 *
    	 * @param macSeparator
    	 *            mac分隔符号
    	 *
    	 * @return mac地址,用上面的分隔符号表示
    	 *
    	 */

    	private static String filterMacAddress(final String ip, final String sourceString,final String macSeparator) {
    	   String result = "";
    	   String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})";
    	   Pattern pattern = Pattern.compile(regExp);
    	   Matcher matcher = pattern.matcher(sourceString);
    	   while(matcher.find()){
    	     result = matcher.group(1);
    	     if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
    	        break; // 如果有多个IP,只匹配本IP对应的Mac.
    	     }
    	   }
    	    return result;
    	}

    	/**
    	 * @param ip
    	 *            目标ip
    	 * @return Mac Address
    	 *
    	 */

    	private static String getMacInWindows(final String ip){
    	   String result = "";
    	   String[] cmd = {"cmd","/c","ping " + ip};
    	   String[] another = {"cmd","/c","arp -a"};
    	   String cmdResult = callCmd(cmd,another);
    	   result = filterMacAddress(ip,cmdResult,"-");
    	   return result;
    	}
    	 /**
    	  *
    	  * @param ip
    	  *            目标ip
    	  * @return Mac Address
    	  *
    	  */
    	 private static String getMacInLinux(final String ip){ 
    	     String result = ""; 
    	     String[] cmd = {"/bin/sh","-c","ping " +  ip + " -c 2 && arp -a" }; 
    	     String cmdResult = callCmd(cmd); 
    	     result = filterMacAddress(ip,cmdResult,":"); 
    	     return result; 
    	 } 

    	 /**
    	  * 获取MAC地址
    	  *
    	  * @return 返回MAC地址
    	  */
    	 public static String getMacAddress(String ip){
    	     String macAddress = "";
    	     macAddress = getMacInWindows(ip).trim();
    	     if(macAddress==null||"".equals(macAddress)){
    	         macAddress = getMacInLinux(ip).trim();
    	     }
    	     return macAddress;
    	 }
}

2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

JAVA之——获取来访者IP、浏览器版本、系统版本、主机名、Mac地址等信息(插曲)

不多说,直接上代码 package com.cdsmartlink.utils.system; import java.io.BufferedReader; import java.io.Input...
  • l1028386804
  • l1028386804
  • 2015-05-27 17:45
  • 9888

java 通过userAgent获取访问者的操作系统与浏览器

StringBuilder userAgent = new StringBuilder("[");         userAgent.append(request.getHeader("User-A...
  • mylovepan
  • mylovepan
  • 2015-10-28 23:01
  • 4874

JavaWeb-网站在线用户信息、网站访问量以及管理踢出用户实例

转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 这个稍微比上个版本做得完善了一点,用了JavaBean来封装用户信息,添加了一...
  • qq_26525215
  • qq_26525215
  • 2016-08-20 16:59
  • 4750

java获取外网IP和省市区,抓取方式

  • 2015-12-03 11:39
  • 265KB
  • 下载

用Java来获取访问者真实的IP地址

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I...
  • libaolin198706231987
  • libaolin198706231987
  • 2016-06-07 14:36
  • 15084

java根据ip地址获取详细地域信息

互联网有很多接口可以实现通过ip查询到具体的位置,如下: 通过淘宝IP地址库获取IP位置 1. 请求接口(GET):http://ip.taobao.com/service/get...
  • wave_1102
  • wave_1102
  • 2015-08-25 12:45
  • 5494

JSP/Java获取HTTP header信息(request)例子

转载地址:http://blog.csdn.net/pursue168/article/details/6205105 类似的方法在java代码中也能用,其中用request.getMethid()...
  • waiwai4701
  • waiwai4701
  • 2016-11-16 15:04
  • 143

JavaWeb 案例——访问权限控制

一、功能介绍        每个网站都涉及到访问权限的控制。每个站点资源都需要被管理起来,用户只有具有访问某个资源的特定权限,才能够访问,否则拒绝访问。 二、项目分析     ...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016-04-22 18:39
  • 13597

访客管理系统-面向过程

  • 2016-04-02 17:09
  • 178KB
  • 下载

php获取浏览器信息。获取访客语言。获取访客操作系统。获取访客IP地址。获取访客地理位置。

php获取浏览器信息,获取访客语言:简体中文、繁體中文、English。获取访客操作系统:Windows、MAC、Linux、Unix、BSD、Other。获取访客IP地址。获取访客地理位置,使用 新...
  • u011986449
  • u011986449
  • 2014-01-20 13:17
  • 4878
    个人资料
    • 访问:1999892次
    • 积分:26080
    • 等级:
    • 排名:第259名
    • 原创:808篇
    • 转载:9篇
    • 译文:0篇
    • 评论:298条
    博客专栏
    Android

    文章:80篇

    阅读:231210
    Python

    文章:50篇

    阅读:33270
    搜索优化

    文章:21篇

    阅读:25384
    Nginx

    文章:17篇

    阅读:52911
    Dubbo

    文章:20篇

    阅读:41159
    JMS

    文章:13篇

    阅读:11200
    Netty

    文章:1篇

    阅读:1727
    Redis

    文章:18篇

    阅读:90427
    Memcached

    文章:9篇

    阅读:44753
    设计模式

    文章:22篇

    阅读:47737
    Mycat

    文章:20篇

    阅读:25057
    Web前端

    文章:22篇

    阅读:81831
    Linux

    文章:76篇

    阅读:219325
    JVM

    文章:15篇

    阅读:50224
    J2EE

    文章:74篇

    阅读:272008
    Java

    文章:152篇

    阅读:494816
    Hadoop生态

    文章:129篇

    阅读:194955
    MySQL

    文章:129篇

    阅读:255063
    最新评论