代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
JavaWeb根据IP地址获取客户端MAC物理地址
作者:
/ 发布于
2019/8/7
/
915
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GetMacAddress { public 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 第二个命令的执行结果 */ 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 (Exception e) { 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; } // 做个测试 public static void main(String[] args) { System.out.println("mac0==="+getMacAddress("192.168.1.103")); System.out.println("mac1==="+getMacAddress("192.168.1.47")); System.out.println("mac2==="+getMacAddress("220.181.111.148")); }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3