关于获得本机Mac Address的方法

网络上有讲获得Mac address的方法有如下:

1. 发送ARP命令,利用返回的Mac Address缓冲区得到

2. 用NetworkInterface.GetAllNetworkInterfaces()获得所有网卡(包括虚拟网卡),从而获得相应的Mac address

3. 还有是从本机的注册表中获得:

ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();
    bool flag = false;
    using (ManagementObjectCollection.ManagementObjectEnumerator enumerator = managementObjectCollection.GetEnumerator())
    {
     while (enumerator.MoveNext())
     {

这三种方法第1,2种比较好,当本机有多块网卡,或虚拟网卡时,第三种在Win8下是不准确的。第1,2种都可以根据给定的参数IP值来准确定位对应的Mac Address.

第二种代码如下:

string macAddress = "" ;
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); 
            foreach (NetworkInterface adapter in nics) 
            { 
                if (!adapter.GetPhysicalAddress().ToString().Equals("")) 
                { 
                    macAddress = adapter.GetPhysicalAddress().ToString(); 
                    for (int i = 1; i < 6; i++) 
                    { 
                        macAddress = macAddress.Insert(3 * i - 1, ":"); 
                    } 
                    break; 
                } 
            }

第一种方法如下:

public static string GetMac(string p_Id)
        {
            IPAddress _Address;
            if (!IPAddress.TryParse(p_Id, out _Address)) return "";
            uint DestIP = System.BitConverter.ToUInt32(_Address.GetAddressBytes(), 0);
            ulong pMacAddr = 0;
            uint PhyAddrLen = 6;
            uint error_code = SendARP(DestIP, 0, ref pMacAddr, ref PhyAddrLen);
            byte[] _Bytes1 = BitConverter.GetBytes(pMacAddr);
            return BitConverter.ToString(_Bytes1, 0, 6);
        }

[DllImport("Iphlpapi.dll")]
        public static extern uint SendARP(uint DestIP, uint SrcIP, ref ulong pMacAddr, ref uint PhyAddrLen);

时间: 2024-10-06 13:40:28

关于获得本机Mac Address的方法的相关文章

linux 获取本机MAC/IP地址的方法

功能:查询本机IP/MAC地址,过滤掉127.0.0.1 loop-back 地址 适用:linux, ubuntu 16.04 调试通过 #include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#includ

C# 获取本机mac地址 客户端主机名称(hostName) 当前用户(CurWinUser) 操作系统版本(WinVersion) IE浏览器版本(IEversion) 物理内存(Memory) 跳至网关的IP地址(IpAddress) CPU序列号 等等

关于获取本机信息的代码,园子里面还是非常多的,专门整理了一下此次用到的信息 首先,获取跳至网管的IP地址 #region 获取调至网管的IP地址 string ipAddress = GetLocalIp(); #endregion ///此方法需要计算机连网,否则获取不到IP地址 private string GetLocalIp() { string result = RunApp("route", "print", true); Match m = Regex

用派克斯出现651 查看&修改mac地址的方法

1.winxp查看mac地址的方法 2.winxp修改mac地址的方法 电脑MAC地址是网卡适配器在出厂时就已经被固定了的,也叫物理地址,每块网卡适配器有全球唯一的MAC地址,一般情况是不需要修改MAC地址的,但有些特殊情况需要更改MAC地址来实现一些特殊的要求,修改之前大家先知道如何查看 第一种方法 1.在开始菜单栏选择"运行" 2.在运行中输入"cmd" 3.我们会看到有一个黑色窗口弹出,在里边输入"ipconfig /all"然后按回车键

windows获取本机MAC地址并写入文件的bat

windows获取本机MAC地址并写入文件的bat MAC(Media Access Control)地址,或称为 MAC地址.硬件地址,用来定义网络设备的位置. bat代码例如以下: @echo off echo GET MAC ADDRESS echo PLEASE WAIT... getmac /v > mac.txt echo GET MAC ADDRESS SUCCESS pause exit 查看mac.txt,获取成功 连接名 网络适配器 物理地址 传输名称 ===========

MySQL------代码1024,can&#39;t get hostname for your address解决方法

1.hosts文件问题 进入C:\Windows\System32\drivers\etc\hosts 查看里面是否包含: # 127.0.0.1 localhost 没有则添加,再重启MySQL服务 2.重置sock 打开cmd.exe 输入tracert 127.0.0.1 //看能不能回调本机 成功后 输入netsh winsock reset 重启MySQL服务 MySQL------代码1024,can't get hostname for your address解决方法

【小错误】Device eth2 has different MAC address than expected, ignoring.

今天在搭建rac配置IP的时候报错显示如下: Device eth2 has different MAC address than expected, ignoring.[FAILED] 百度了下,问题解决. 问题原因: 配置文件里的MAC地址和真实的MAC不一样. 含有MAC信息的配置文件是/etc/sysconfig/network-scripts/ifcfg-eth0. 查看本机实际MAC的命令是 ifconfig eth0 解决办法: 查看配置文件/etc/sysconfig/netwo

Ubuntu 下,修改 Mac address

ifconfig    //    check Mac address sudo ifconfig eth0 down sudo ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx sudo ifconfig eth0 up ifconfig    //    check Mac address where is active 這方法重開機之後,會恢復原來的 Mac address

VMware 虚拟机修改MAC地址的方法

VMware VM所使用的OUI 按照VMware ESX 3的[Server Configuration Guide ]的说法,VMware的使用下面的三个OUI作为VM的MAC地址: 00:0C:29 – 用于自动生成的MAC地址 00:50:56 – 用于手动设置的MAC地址 但是在实际应用上,我发现00:50:56这一MAC地址段并不是完全用于手动设置的MAC地址: 00:50:56:00:00:00 – 00:50:56:3F:FF:FF这一段MAC地址可以用于手动设置的MAC地址 0

?vmware虚拟机centos网络配置错误,执行/etc/init.d/network start 或 restart 提示Device eth0 has different MAC address than expected, ignoring

vmware虚拟机centos网络配置错误,执行/etc/init.d/network start 或 restart 提示Device eth0 has different MAC address than expected, ignoring 解决方法: 执行:grep -rHi eth0 /etc/udev/rules.d/ It will probably show you a file that has a udev rewrite rule for the eth0 and has