public static String callCmd(String[] cmd) {
String result = "";
String line = "";
Process proc;
try {
proc = Runtime.getRuntime().exec(cmd);
InputStreamReader is = new InputStreamReader(proc.getInputStream());
BufferedReader br = new BufferedReader(is);
while ((line = br.readLine()) != null) {
result += line;
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
*
*
*
* @param cmd
* 第一个命令
*
* @param another
* 第二个命令
*
* @return 第二个命令的执行结果
*
*/
public 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 (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
*
*
*
* @param ip
* 目标ip,一般在局域网内
*
* @param sourceString
* 命令处理的结果字符串
*
* @param macSeparator
* mac分隔符号
*
* @return mac地址,用上面的分隔符号表示
*
*/
public 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
*
*
*
*/
public 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
*
*/
public 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;
}
/**
* 获取客户端ip
*
* @param request
* @return
*/
public static 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();
}
if ("0:0:0:0:0:0:0:1".equals(ip)) {
return "127.0.0.1";
}
return ip;
}
/**
* 获取MAC地址(如果获取ip为127.0.0.1的话就不会得到值了。)
*
* @throws UnknownHostException
* @throws SocketException
*/
public static String getMACAddress(String ip) throws SocketException,
UnknownHostException {
if ("127.0.0.1".equals(ip)) {
return getLocalMac();
}
return getMacAddress(ip);
}
// 获取本机mac
private static String getLocalMac() throws SocketException,
UnknownHostException {
try {
InetAddress ip = InetAddress.getLocalHost();
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
if (network != null) {
byte[] mac = network.getHardwareAddress();
if (mac != null) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i],
(i < mac.length - 1) ? "-" : ""));
}
return sb.toString();
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}
- 浏览: 73171 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (108)
- 数据库 (6)
- web前端 (13)
- java基础 (29)
- XML (3)
- CSS (1)
- JQuery (2)
- 杂谈 (1)
- struts2 (1)
- 配置 (2)
- 系统 (1)
- javaScript (1)
- tomcat (2)
- maven (5)
- jxl (1)
- spring (6)
- JAX-RS (2)
- servlet-api (1)
- js (1)
- itext (1)
- 面试 (4)
- java自定义注解 (1)
- jsp (3)
- linux (4)
- eclipse (1)
- ftp (1)
- 受益匪浅 (5)
- redis (5)
- java优化 (1)
- protobuf (1)
- virtualbox (1)
- 操作系统 (1)
- 异常 (1)
最新评论
发表评论
-
easyUI的iframe子页面操作父页面元素
2014-12-11 13:25 428曾经试过这样的方法 在iframe子页 ... -
javascript 将HTML转为 word,pdf 等(ie)
2014-08-18 13:39 900/** * @author wsf html转换工具 ... -
JSTL-EL表达式
2014-05-28 13:38 387JSTL-EL表达式 一个E ... -
session与cookie的异同
2014-05-22 15:57 4621.cookie 是一种发送到客户浏览器的文本串句柄,并保存 ... -
java获取客户端ip和mac
2014-05-21 14:00 359来源:http://www.cnblogs.com/hxsyl ... -
URL编码(传递特殊符号)
2014-05-20 10:04 774url编码是一种浏览器用来打包表单输入的格式,一 ... -
java实现验证码
2014-04-28 11:55 792/***************************** ... -
获取工程路径
2013-06-07 14:39 630<%String path = request.get ... -
一个不错的jquery讲解
2013-06-03 16:59 613http://www.cnblogs.com/zhangziq ... -
web程序使用时记得清理Tomcat缓存
2013-02-28 10:10 653当发布web程序时,如果在自己修改完页面或者js后启动程序没有 ... -
点击<a>标签,禁止页面自动跳到顶部的解决办法
2013-02-21 11:16 1623"平时开发的HTML表单,链接通常会使用 ... -
File Uploader:支持进度显示与文件拖拽的多文件上传前端JS脚本 .
2013-01-31 10:13 943File Uploader的前身是Ajax Upload。 ...
相关推荐
### Java 获取客户端 IP 和 MAC 地址 在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端...
### Java 获取客户端 IP 地址 在 Web 开发中,获取客户端 IP 地址是一项非常重要的功能,尤其是在需要记录用户活动、实现地理位置定位...以上就是关于如何在 Java 中获取客户端 IP 地址及 MAC 地址的相关知识点介绍。
在Java编程中,获取服务器的IP地址和MAC地址是常见的需求,特别是在网络通信和系统管理中。本篇文章将详细介绍如何使用Java实现这一功能,包括针对单网卡和多网卡环境的情况。 首先,获取服务器的IP地址通常涉及到`...
在对网内主机进行监控时需要通过java获取远程机器的mac地址
在Java编程中,获取客户端的Mac地址通常是用于设备识别或者网络管理等场景。Mac地址(Media Access Control Address)是网络接口控制器(NIC,Network Interface Controller)的物理地址,它是硬件级别的唯一标识。...
本文将深入探讨如何在不同的操作系统上获取本机的IP和MAC地址,以及如何判断一个IP地址是否为内网IP,并将字符串形式的IP地址转换为数值表示。我们将主要关注以下几个知识点: 1. **跨平台获取本机IP地址**: 跨...
在Java编程环境中,获取客户端的MAC(Media Access Control)地址是一项常见的需求,特别是在网络通信或者设备识别等场景中。MAC地址是硬件级别的唯一标识符,它对应于网络接口控制器(NIC),在网络通信中用于标识...
由于Java的跨平台特性,VNC Java客户端可以在任何安装了Java运行环境的设备上运行,无论是Windows、Mac还是Linux。Java客户端通过实现VNC协议,与VNC服务端建立连接,实现远程桌面的显示和操作。Java客户端可能包含...
获取本地IP地址,获取本地Host名称,获取Linux下的IP地址,获取用户真实IP地址,get/post请求 相应的工具类
### 使用Java实现获取MAC地址的方法 #### 背景与目的 在计算机网络管理或安全领域,有时需要获取远程主机的MAC地址来进行设备识别或跟踪。本文将介绍一种使用Java编程语言来实现获取本地或远程计算机MAC地址的方法...
1. **获取客户端IP地址**: - 在传统的JSP页面中,可以通过`HttpServletRequest`的`getRemoteAddr()`方法直接获取客户端的IP地址。这适用于服务器直接与浏览器交互的情况。 - 对于JSF(JavaServer Faces)应用,...
在IT领域,获取服务器的MAC(Media Access Control)地址和IP(Internet Protocol)地址是常见的系统管理任务。MAC地址是网络设备的物理地址,而IP地址则是网络通信中的逻辑地址。在Windows和Unix(包括Linux)系统...
本文将深入探讨如何在操作系统中获取主机本地IP地址以及宽带拨号时的IP地址,主要针对的是动态分配的IP地址,因为这通常是家庭或小型办公室网络中常见的设置。 首先,我们需要了解IP地址的基本概念。IP地址...
- 安装时,需要将JCo的jar文件添加到Java项目的类路径中,同时确保系统路径中包含相应的动态链接库(dll文件在Windows上,dylib文件在Mac上,so文件在Linux上)。 - 配置JCo连接参数,如SAP系统的主机名、端口、...
在本主题中,我们将深入探讨如何使用Sigar,特别是其在获取客户端IP和MAC地址方面的应用。 首先,使用Sigar之前,你需要在项目中引入Sigar的JAR包。在Java项目中,这通常意味着将`sigar.jar`添加到类路径中。在提供...
这个项目由一位韩国开发者创建,旨在提供跨平台的即时通讯解决方案,因为Java语言的“一次编写,到处运行”特性使得JavaMSN可以在不同的操作系统上运行,如Windows、Linux和Mac OS。 在JavaMSN中,主要涉及以下几个...
Java作为编程语言,具有“一次编写,到处运行”的特性,使得Java CS应用可以在多种操作系统上运行,如Windows、Linux和Mac OS等。 其次,远程监控系统的核心功能包括数据采集、传输、存储和分析。在Java CS系统中,...
Java的“一次编写,到处运行”特性确保了该系统能在多种操作系统上运行,如Windows、Linux或Mac OS。此外,Java丰富的类库和API提供了强大的网络通信支持,这对于构建远程监控系统至关重要。 远程监控系统的核心...
在数据传输过程中,如浏览网页,数据从应用层(如浏览器)开始,通过传输层(TCP标记端口号),再到网络层(添加源IP和目标IP形成IP数据包),最后在网络接口层加上MAC地址成为帧,通过网卡发送。接收方的处理过程则...
其“一次编写,到处运行”的特性使得Java程序能在多种操作系统上运行,包括Windows、Linux、Mac OS等。Java的基础包括类、对象、接口、继承、多态、封装等概念,这些是构建聊天程序的基础。 二、Java网络编程 1. ...