`

根据IP获取Mac Address

阅读更多
Mac Address(Physical Address), 作为计算机的一个重要的标识,已经赢得很多的注册软件作为标识符号的青睐(尽管高级用户可以随意修改这个地址)。 下面是Java代码程序,没有经过更多平台的测试。使用时,请对平台进行更多测试.

   如果你测试通过了X平台,或经过修改后成功取得了数据。请奉献出来或给予评论.

/**
*
* @author ihavegotyou
* Created on 2010-01-23
* Email ihavegotyou520 AT hotmail DOT com
*/

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 根据ip获取MAC地址.
 *
 * @author ihavegotyou
 * @version 10.1.23
 */
public class GetMacFromIp {

	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);
			int exitVal = 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;
	}


	/**
	* 测试
	*/
	public static void main(String[] args) {
		String fileSeparator = System.getProperty("file.separator"); //根据文件分隔符号区分平台
		if (fileSeparator.equals("/")){
			System.out.println(getMacInLinux("192.168.199.42"));
		}
		else if(fileSeparator.equals("\\")){
			System.out.println(getMacInWindows("192.168.1.175"));  //nicrosoft喜欢对着干
			//System.out.println(getMacInWindows("127.0.0.1"));
		}
	}

}

分享到:
评论

相关推荐

    获取本地ip,mac地址

    这段代码通过NetworkInterface.GetAllNetworkInterfaces获取所有网络接口,然后筛选出状态为Up且非回环接口的网络接口,最后通过GetPhysicalAddress方法获取MAC地址。 结合这两个函数,我们可以编写一个小程序来...

    通过IP地址获取对方MAC地址

    要从IP地址获取MAC地址,我们需要使用ARP(Address Resolution Protocol)协议。ARP是用于将IP地址解析为MAC地址的协议,它存在于TCP/IP协议栈的数据链路层。在Windows系统中,我们可以直接调用Iphlpapi.dll库中的...

    .net获取客户端IP,Mac地址

    获取MAC地址相对复杂一些,因为.NET Framework不直接提供API来获取远程客户端的MAC地址。通常情况下,服务器无法直接获取到客户端的MAC地址,除非它们位于同一网络段并且通过ARP(Address Resolution Protocol)协议...

    java 获取客户端ip mac地址

    在实际开发中,获取客户端的IP地址是常见的需求,而获取MAC地址则较为罕见且可能存在一定的法律风险和技术难题。开发者应当根据具体的应用场景和需求来选择合适的方法。此外,在处理敏感信息时,还应遵循相关的法律...

    Python3获取电脑IP、主机名、Mac地址的方法示例

    本文实例讲述了Python3获取电脑IP、主机名、Mac地址的方法。分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 ''' ...# 获取Mac地址 def get_mac_address(): mac=uuid.UUID(int

    C获得指定IP的MAC地址

    当你需要在本地网络中与特定设备通信时,知道其IP地址是不够的,还需要获取对应的MAC地址。在C语言中,可以通过ARP(Address Resolution Protocol)协议来实现这一功能。下面我们将详细介绍如何在C语言中使用ARP协议...

    指定对方IP获取MAC

    如果你想要获取指定IP的MAC地址,你需要使用 ARP(Address Resolution Protocol)协议。ARP 是一种用于将IP地址映射到MAC地址的协议。在C#中,可以借助P/Invoke调用Windows API来实现这个功能。以下是一个简单的示例...

    java编程实现获取服务器IP地址及MAC地址的方法

    至于获取MAC地址,这需要用到`NetworkInterface`类的`getHardwareAddress()`方法。以下是一个获取MAC地址的示例: ```java public static String getLocalMACAddress() { String macAddress = ""; try { ...

    java获取客户端ip及mac地址

    这里提供了一个简单的示例,用于在 Windows 系统中通过 IP 地址获取 MAC 地址: ```java public String getMACAddress(String ip) { String str = ""; String macAddress = ""; try { Process p = Runtime....

    跨平台 获取本机IP/MAC地址,检测是否内网IP,字符串IP转换成Number地址

    例如,在Python中,可以使用`ipaddress`库,将IP地址转换为IPv4Network对象,然后检查其是否为私有网络。 4. **字符串IP转Number地址**: 字符串形式的IP地址(如“192.168.1.1”)可以转换为整数形式,便于计算和...

    PB 获取主机名IP地址MAC地址

    4. **获取MAC地址**:同样在`NetworkInterface`类中,可以找到`GetPhysicalAddress()`方法来获取MAC地址: ```csharp byte[] macBytes = ni.GetPhysicalAddress().GetAddressBytes(); string macAddress = string....

    获取客户端MAC,IP 计算机名的方法

    `ReadMe`文件通常包含关于软件或程序的说明和指导,而`MacAddress`可能是用来演示如何获取MAC地址的代码或数据。为了获取具体信息,你需要打开这些文件进行查看。如果`MacAddress`是Python脚本,运行它可能会直接...

    delphi 整合获取IP和MAC.zip

    请注意,这里只是一个基础示例,实际的`GetMACAddress`函数需要正确处理错误,并解析`Buffer`来获取MAC地址。 在压缩包中的`Unit1.pas`和`Unit1.dfm`文件很可能是实现这些功能的源代码和界面设计文件。`Project1....

    C# 通过IP或计算机名 获取信息

    本主题聚焦于如何利用C#通过IP地址或计算机名获取相关网络信息,包括IP地址、MAC地址以及进行DNS查询。以下是关于这些知识点的详细说明: 1. **IP地址**: - IP(Internet Protocol)地址是网络上设备的唯一标识,...

    JS获取客户端IP地址及MAC地址(转)

    因此,`getIpAndMac.js` 文件可能只实现了获取IP地址的部分,而没有获取MAC地址的功能。 在实际开发中,如果需要获取MAC地址,通常会依赖于客户端应用程序或者用户手动输入。在服务器端,通过特定的网络库或API,如...

    C#获取局域网内所有联网设备的IP地址和MAC地址

    以下是如何在上面的代码基础上添加获取MAC地址的逻辑: ```csharp foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { if (ni.OperationalStatus == OperationalStatus.Up) { ...

    批处理获取本机IP+MAC+计算机名

    2. 获取MAC地址: 对于MAC地址,我们可以用`wmic`(Windows Management Instrumentation Command-line)工具: ``` for /f "skip=7 tokens=2 delims=:" %i in ('wmic nic get MACAddress ^| findstr /v "MAC...

    C# 通过IP或计算机名获取信息 源码

    C#中的`NetworkInterface`类提供了获取MAC地址的方法。以下代码展示了如何获取本地计算机的MAC地址: ```csharp using System.Net.NetworkInformation; PhysicalAddress macAddress = NetworkInterface....

    获取客户端IP、MAC

    获取MAC地址则相对复杂一些,因为Java标准库并不直接提供获取MAC地址的方法。通常需要通过JNI(Java Native Interface)调用操作系统底层API,或者使用第三方库如JNA(Java Native Access)。以下是一个简单的示例,...

    C# 获取本地IP地址以及MAC地址

    C# 获取本地IP地址以及MAC...C#获取本地IP地址和MAC地址可以通过多种方式实现,包括通过主机名获取局域网IP地址、通过局域网IP地址获取主机名和使用nbtstat命令获取MAC地址等方式。这些方法可以满足不同的需求和场景。

Global site tag (gtag.js) - Google Analytics