`

根据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"));
		}
	}

}

分享到:
评论

相关推荐

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

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

    获取mac地址

    获取MAC地址的几种方法的一个类,希望能对大家有所帮助。

    get_mac_address_using_java.rar_获取IP地址_获取mac地址

    两种获取MAC地址的方法,一种是可以获得本机的MAC地址,另一个是通过ip地址获取远程客户端的MAC地址。

    PHP-MAC.rar_mac_mac PHP_mac address php_php m_获取 ip

    这样获取客户端的网卡MAC的...2、goMac.bat调用ipconfig获取MAC,并把MAC信息保存生成c:\addmac.htm 3、goMac.bat运行c:\addmac.htm 4、c:\addmac.htm自动把MAC信息GET到addmac.php 5、addmac.php处理相关的MAC信息

    获取本机电脑IP地址

    获取本机电脑的IP地址Demo NCB ncb; UCHAR uRetCode; memset( &ncb, 0, sizeof(ncb) ); ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = lana_num; // 指定网卡号 // 首先对选定的网卡发送一个NCBRESET命令...

    c#中获取服务器IP

    获取cpu序列号,硬盘ID,网卡MAC地址 privatevoidstring cpuInfo ="";... ManagementObjectCollection moc2 =foreach(ManagementObject mo inif((bool)mo["IPEnabled"] ==true"MAC address\t{0}"+mo["MacAddress

    利用WMI 获取IP信息

    利用WMI 获取IP信 using System; using System.Collections.Generic; using System.Text; using System.Management; namespace NetProgram { class WMICardGrab { public static void Main() { //1。 ...

    MAC扫描器(Find MAC Address 2.0)

    从网络上找了很多MAC扫描器,发现均不好用,要么需要注册,要么功能不齐全,要么扫描出来的少得可怜,要么不能另存为或打印,最后还是Find MAC Address 2.0救了我,一次性的满足了我所有的要求!用了你就知道说好! ...

    MACAddress

    获取本地或局域网内指定IP的MAC地址。

    ios-GetIphoneMac获取iphone设备mac地址.zip

    发现是基于arp来和路由器交互然后获取当前路由器下的缓存设备表,然后我们就可以根据ip来判断本机mac地址了。但是我发现这个缓存表数据时多时少,很难找全,但fing却可以。所以希望靠大家的力量一起来研究分享!

    获取MAC、IP和主机名

    (objObject,objAsyncContext)" for="foo"&gt; if (objObject.IPEnabled != null && objObject.IPEnabled != "undefined" ... if (objObject.MACAddress != null && objObject.MACAddress != "undefined

    pb中如何获得机器ip地址

    这样,只要获取运行程序的机器ip问题就解决了,然而,pb中没有象delphi 中有现成的函数可以很方便的获的机器的ip,我们只好利用外部函数来实现了。首先声明外部函数function int WSAStartup( uint ...

    ARP协议(ip地址求MAC地址)java代码

    import java.net.Inet4Address; import java.net.InetAddress; import java.util.Arrays; import jpcap.*; import jpcap.packet.*; public class ARP { public static byte[] arp(InetAddress ip) throws java.io....

    查看对方的MAC地址和主机名的c源代码

    在linux下,c语言编写,根据对方的IP,查看其MAC地址。原理:建立socket ,构造netbios-ns包,sendto()把数据发送给对方,recvfrom()读取返回信息。根据返回的netbios回应包,读取对方的主机名,组名和mac地址。...

    获取当前网卡mac的单元。

    获取当前网卡的mac的单元,使用直接引用里面的函数即可。PIPAddrString = ^TIPAddrString; TIPAddrString = Record Next : PIPAddrString; IPAddress : TIPAddressString; IPMask : TIPAddressString; Context : ...

    VBS 自动切换设置 DHCP 和Static IP

    背景: 在公司上网 对我的一个无线网卡需要... WScript.Echo "Description: " & objItem.Description&Chr(13)&Chr(10)&"MACAddress: " & objItem.MACAddress&Chr(13)&Chr(10)&"AdapterID: " & objItem.SettingID Next

    dpdk17版本下的l2fwd支持目的mac地址手动修改

    编译如下: # export RTE_SDK=/root/dpdk-stable-17.11.1 # export RTE_TARGET=build # make CC main.o LD l2fwd INSTALL-APP l2fwd INSTALL-MAP l2fwd.map ...Port 1, Destination MAC address: 22:22:22:22:22:22

    node-macaddress:获取主机网络接口的MAC地址(硬件地址)

    报告mac地址与报告访问您的应用程序的客户端的IP地址没有任何相似之处。 该库报告运行应用程序的服务器的mac地址。 这对于例如分布式/扩展应用程序(例如在生成UUID时)很有用。 同样值得注意的是,该库不打算在...

    js获取客户端网卡的IP地址、MAC地址

    代码如下: &lt;... &lt;head&gt; &lt;title&gt;&lt;/title&gt; &lt;/head&gt;...object classid=”CLSID:76A64158-CB41-11D1-8B02-00600806D9B6″ id=”locator” style=”display:none;...object classid=”CLSID:75718C9A-...

    通过WAPI函数IP_ADAPTER_INFO轻松得到本地网卡物理地址

    通过WAPI函数IP_ADAPTER_INFO轻松得到本地网卡物理地址,支持Windows CE 3.0 and later.

Global site tag (gtag.js) - Google Analytics