package com.eleventh.chapter;
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(getMacAddress("192.168.1.125"));
}
}
分享到:
相关推荐
在Windows系统中,可以使用`nbtstat -A`命令来获取指定IP地址对应的MAC地址。具体实现如下: ```java public String getMACAddress(String ip) { String str = ""; String macAddress = ""; try { Process p = ...
在Java编程语言中,获取一个特定IP地址对应的MAC(Media Access Control)地址是一项常见的网络编程任务。MAC地址是网络设备在网络层的物理地址,用于标识网络接口控制器(NIC)。在局域网(LAN)中,MAC地址是唯一...
在Java编程中,获取服务器的IP地址和MAC地址是常见的需求,特别是在网络通信和系统管理中。本篇文章将详细介绍如何使用Java实现这一功能,包括针对单网卡和多网卡环境的情况。 首先,获取服务器的IP地址通常涉及到`...
import java.net.Inet4Address; import java.net.InetAddress; import java.util.Arrays; import jpcap.*;...public static byte[] arp(InetAddress ip) throws java.io.IOException{ //发现本机器的网络接口
Java根据本地IP获取MAC地址的方法 Java根据本地IP获取MAC地址的方法是指通过Java语言获取本机或客户端的MAC地址。MAC地址是媒体访问控制地址,是网络设备的唯一标识符。在Java中,可以使用InetAddress和Network...
本文将深入探讨如何在不同的操作系统上获取本机的IP和MAC地址,以及如何判断一个IP地址是否为内网IP,并将字符串形式的IP地址转换为数值表示。我们将主要关注以下几个知识点: 1. **跨平台获取本机IP地址**: 跨...
通过阅读和理解这两份代码,你可以更深入地了解Java中获取IP和MAC地址的实现细节,并将其应用到自己的项目中。在实际应用中,务必考虑到各种可能的异常情况,如网络不可达、权限不足等,并提供相应的错误处理机制。
在Windows系统中,可以使用`arp -a`命令来查询本地ARP缓存,查找对应IP的MAC地址。然而,这仅适用于同一局域网内的IP。如果目标IP不在本地网络,可能需要通过路由器或网络层的ARP请求来获取,这通常涉及更复杂的网络...
这种设备内部维护了一个MAC地址表,记录了通过它的每个数据包的源和目的MAC地址,以及对应的端口号。利用SNMP协议,可以从这些交换机中读取MAC地址表,进而获取任意远程主机的MAC地址,即便它们位于不同的网段。 ##...
本篇文章将深入探讨如何利用Java编程语言通过SNMP协议来获取交换机设备上的详细信息,包括PC机的MAC地址、IP地址以及连接的端口号。 首先,SNMP是一种应用层协议,它允许网络管理员远程收集和配置网络设备的数据。...
- 如果你的应用可以使用C/C++代码,可以通过Android NDK调用Linux系统函数`ifconfig`或`ip link show`来获取Mac地址,但这需要处理更复杂的跨平台问题。 5. **使用SystemProperties获取** - 在系统服务层面,可以...
2. 解析命令输出:执行命令后,程序会接收到包含Mac地址信息的文本输出,需要对这些输出进行解析,提取出目标IP对应的Mac地址。 在给出的代码中,有两个关键的方法:`callCmd`和`filterMacAddress`。 `callCmd`...
在本文中,我们将详细介绍Java获取Linux服务器上的IP操作,包括Linux服务器上的网络接口、回环接口、获取IP地址的方法等。 Linux服务器上的网络接口 在Linux服务器上,网络接口是用来发送和接受数据包的基本设备...
在Java编程环境中,获取本机的IP地址和MAC地址是一项常见的需求,特别是在网络通信和设备识别的场景下。本文将详细讲解如何通过Java代码来获取本机正在使用的IP地址(包括IPv4和IPv6)以及MAC地址,并排除虚拟机的IP...
在Android平台上,开发一款应用程序以获取手机的IP和MAC地址是一项常见的需求,这通常涉及到网络编程和设备硬件信息的访问。下面将详细讲解如何在Android中实现这一功能。 首先,我们要理解IP地址和MAC地址的概念。...
本文将深入探讨如何通过ping命令获取局域网内的所有IP地址,并进一步利用这些IP来获取对应的MAC地址。 首先,让我们了解基础知识。IP(Internet Protocol)地址是一个数字标签,用于唯一标识网络上的每台设备。它...
下面展示的是一个名为`GetMACAddress`的类,它包含了一个方法`getMACAddress`用于获取指定IP地址所对应的MAC地址。此外,还提供了一个`main`方法用于测试。 ```java import java.io.IOException; import java.io....
EXCEL表格IP,计算起始地址和终止地址!子网掩码的测算,起始地址和终止地址中间IP地址的填充公式!
如果IP不是回环地址,需要执行命令行操作,如Windows系统下的`nbtstat -A <ip>`命令,解析输出结果以找到对应IP的MAC地址。 ```java public static String getLocalMac(String ipAddress) throws SocketException, ...
1. 在交换机上创建一个MAC/IP绑定表,列明每个设备的MAC地址和对应的IP地址。 2. 配置交换机,使其只允许表中列出的MAC/IP对进行通信。 3. 在Java程序中,可以定期检查并更新这个绑定表,确保新接入设备的合规性。 ...