java得到clientIP地址和MAC住址
最近的项目应该得到client的mac住址。
服务器移植centos制,arm建筑箱。client手机和移动设备。(其他方案也应该是一流的似的)
首先,要获得ip住址:
依据client的http请求,利用request.getRemoteAddr()获取clientIp地址。在局域网内getRemoteAddr()和getRemoteHost()获得的结果同样。
request.getRemoteAddr()是获得client的ip地址 。getRemoteHost()是获得client的主机名 。
在有些场景中,可能有Squid等反向代理软件就不能获取到client的真实IP地址了。
经过代理以后,因为在client和服务之间添加了中间层,因此server无法直接拿到client的IP,server端应用也无法直接通过转发请求的地址返回给client。可是在转发请求的HTTP头信息中,添加了X-FORWARDED-FOR信息。用以跟踪原有的clientIP地址和原来client请求的server地址。当我们訪问http://www.letu.com/index.jsp/ 时。事实上并非我们浏览器真正訪问到了server上的index.jsp文件,而是先由代理server去訪问http://159.226.94.32/index.jsp
。代理server再将訪问到的结果返回给我们的浏览器。由于是代理server去訪问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理server的地址,并非client的IP地址。
//获取ip地址
public String getIpAddr(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.getRemoteAddr();
}
return ip;
}
获取mac地址:
计算机上安装的每个以太网或令牌环网络适配器都有自己单独的表。假设在没有參数的情况下使用。则ARP命令将显示帮助信息。仅仅有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。另外netstat命令经常和ARP配合使用。netstat命令可以让用户得知眼下都有哪些网络连接正在运作。可以显示网络连接、路由表和网络接口信息。arp命令主要作用是显示和改动“地址解析协议
(ARP)”缓存 中的项目。 ARP 缓存中包括一个或多个表。它们用于存储 IP 地址及其经过解析的物理地址(MAC地址)。 计算机上安装的每个网卡都有自己单独的表。 假设在没有參数的情况下使用,则 arp 命令将显示帮助信息。
我们用ARP -n 列出具体信息。
[root@centos-5 bin]# arp -n
Address HWtype HWaddress Flags Mask Iface
159.226.94.126 ether A4:56:30:D3:5D:43 C eth0
获取mac的java 代码:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader; public class MACAddress {
String ip;
String mac;
public MACAddress (String ip){
this.ip = ip;
}
public MACAddress (){
this.ip = "0.0.0.0";
}
public String getMac(){
try {
Process p = Runtime.getRuntime().exec("arp -n");
InputStreamReader ir = new InputStreamReader(p.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
p.waitFor();
boolean flag = true;
String ipStr = "(" + this.ip + ")";
while(flag) {
String str = input.readLine();
if (str != null) {
if (str.indexOf(ipStr) > 1) {
int temp = str.indexOf("at");
this.mac = str.substring(
temp + 3, temp + 20);
break;
}
} else
flag = false;
}
} catch (IOException | InterruptedException e) {
e.printStackTrace(System.out);
}
return this.mac;
}
public void setIp(String ip){
this.ip = ip;
} }
參考文档:http://blog.sina.com.cn/s/blog_6c87374b01019nwk.html
版权声明:本文博主原创文章,博客,未经同意不得转载。
java得到clientIP地址和MAC住址的更多相关文章
- Java根据ip地址获取Mac地址,Java获取Mac地址
Java根据ip地址获取Mac地址,Java获取Mac地址 >>>>>>>>>>>>>>>>>&g ...
- Java根据IP地址获取MAC地址
先使用ping -n 2 10.0.0.1 命令,如果返回的结果中含有TTL字符,证明ping 10.0.0.1是能ping通的,即可达的.如果在Linux机器上请使用 ping -c 2 10.0 ...
- MAC地址,使用java获取IP地址和MAC地址。
MAC地址,通常在http连接的项目中,来区分唯一客户端. MAC:六组十六进制字符组成. 如:E0-3F-49-AB-DB-EB IP:四组八位的二进制字符组成. 如:10.6.62.244 /** ...
- 采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址
采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址. Truelicense 它是一个开源java license ...
- java获取服务器IP地址及MAC地址的方法
这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下 本文实例讲述了 ...
- java根据本地Ip获取mac地址
import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; impo ...
- java 通过ip获取客户端mac地址
java 通过ip获取客户端mac地址 package com.asppro.util; import java.io.BufferedReader; import java.io.IOExcepti ...
- Java获取主板序列号、MAC地址、CPU序列号工具类
import java.io.File; import java.io.FileWriter; import java.io.BufferedReader; import java.io.IOExce ...
- JAVA获取本机的MAC地址
/** * 获取本机的Mac地址 * @return */ public String getMac() { InetAddress ia; byte[] mac = null; try { // 获 ...
随机推荐
- ArcGIS For Flex给定两个
1.错误叙述性说明 2.错误原因 3.解决方案 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- AMDU恢复ASM磁盘组数据(測)
--umount ASMCMD> umoung -a asmdg commands: md_backup, md_restor lsattr, setattr ...
- IOS开发应用
IOS开发应用 我的第一个IOS开发应用 1. 需求描述 2. 开发环境介绍 3. 创建一个工程 4. 工程配置介绍 5. 目录结构介绍 6. 界面设置 7. 关联输入输出 8. 关联事件代码 9. ...
- Android在Context详细解释 ---- 你不知道Context
...
- intellij idea该插件开发摘要
最近在做一个intellij idea插件,功能是读取表和数据库信息字段和预先定义的模板来生成代码文件(实体,service,springmvc该controller,freemark文件等). 找了 ...
- Web测试基于实际测试的功能测试点总结--转载
文章来源:http://www.51testing.com/html/99/n-854599.html 好文章就该记录一下\(^o^)/~ 一.页面链接检查:测试每一个链接是否都有对应的页面,并且页面 ...
- 基于三星ARM9(S3C2410)的交通违章抓拍系统的开发
ARM9的交通违章抓拍系统的开发 ARM9的交通违章抓拍系统的开发 智能交通系统(ITS)将先进的信息技术.数据通讯传输技术.电子控制技术.计算机处理技术等应用于交通运输行业,从而实现各种运输方式 ...
- eclipse 代码清理 代码格式化 代码凝视
Code Style包含两个方面:代码清理,代码规范化.代码清理能够參考: http://www.ibm.com/developerworks/cn/opensource/os-eclipse-cle ...
- android应用开发--------------看RadioGroup源代码,写相似单选选项卡的集成控件(如底部导航,tab等等)
博客为 有时个哥 原创.如需转载请标明出处:http://blog.csdn.net/ls703/article/details/46694967 watermark/2/text/aHR0cDovL ...
- Effective C++:规定20: 宁pass-by-reference-to-const更换pass-by-value
(一) 假设传递参数当函数被调用pass-by-value,然后函数的参数是基于实际参数的副本最初值,调用,也得到该函数返回的结束值复印件. 请看下面的代码: class Person { publi ...