怎样获取MAC码
- 格式:ppt
- 大小:342.00 KB
- 文档页数:8
获取手机(ios,android)的设备唯一码(mac地址,IMEI)app中总会用到客户端下载量数据统计,一般都是用的设备的唯一码作为标示,以下是获取mac地址的代码片段,记录备份。
android 获取mac地址1. <uses-permission android:name="android.permission.ACCESS_WIFI_ST ATE">2. private String getLocalMacAddress(){WifiManager wifi = (WifiManager)getSystemService(Contex t.WIFI_SERVICE);WifiInfo info = wifi.getConnectionInfo();return info.getMacAddress();}android 获取IMEI数据public static String getIMEI(Context context) {return ((TelephonyManager) context.getSystemService(Cont ext.TELEPHONY_SERVICE)).getDeviceId();}ios 获得mac地址+(NSString *)getLocalMacAddress{int mib[6];size_t len;char *buf;unsigned char *ptr;struct if_msghdr *ifm;struct sockaddr_dl *sdl;mib[0] = CTL_NET;mib[1] = AF_ROUTE;mib[2] = 0;mib[3] = AF_LINK;mib[4] = NET_RT_IFLIST;if ((mib[5] = if_nametoindex("en0")) == 0) {//printf("Error: if_nametoindex error/n"); return NULL;}if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {//printf("Error: sysctl, take 1/n");return NULL;}if ((buf = malloc(len)) == NULL) {//printf("Could not allocate memory. error!/n"); return NULL;}if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {//printf("Error: sysctl, take 2");return NULL;}ifm = (struct if_msghdr *)buf;sdl = (struct sockaddr_dl *)(ifm + 1);ptr = (unsigned char *)LLADDR(sdl);// NSString *outstring = [NSString stringWithFormat:@"%0 2x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3 ), *(ptr+4), *(ptr+5)];NSString *outstring = [NSString stringWithFormat:@"%02x %02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(p tr+4), *(ptr+5)];free(buf);return [outstring uppercaseString];}。
电脑mac地址如何查询
MAC地址在网卡中是固定的,每张网卡的MAC地址都不一样。
那么电脑mac地址如何查询呢?店铺分享了查询电脑mac地址的方法,希望对大家有所帮助。
电脑mac地址查询方法一
1、直接用win+R打开运行命令。
2、在打开中输入cmd,点击确定。
3、打开后在英文状态下运行命令ipconfig /all 。
4、按回车键确定,可以看到一个Physical Address,这个也就是mac地址。
电脑mac地址查询方法二
1、在桌面中找到“网络”,右键找到属性,进入“网络和共享中心”;
2、找到网络连接,点击它会打开状态窗口,找到“详细信息”,在里面就可以找到对应网卡的物理地址了;
电脑mac地址查询方法三
1、在电脑右下角,打开网络连接,找到当前的网络连接,右键后可以看到状态,点击后查看方法与第二种一样。
如何获知本机的MAC地址
MAC地址是Ethernet协议使用的地址。
MAC地址是Ethernet网卡上带的地址,长度为48位。
每个Ethernet网卡生产厂家必须向IEEE组织申请一组MAC地址,在生产网卡时在网卡的串行EEPROM中写入一个唯一的MAC地址。
任何两个Ethernet网卡的MAC地址,不管是哪一个厂家生产的都不应相同。
Ethernet芯片厂家不必负责MAC地址的申请,MAC地址存在于每一个Ethernet包中,是Ethernet包头的组成部分,Ethernet交换机根据Ethernet包头中的MAC源地址和MAC目的地址实现包的交换和传递。
那么我们如何知道自己机器网卡的MAC地址呢?其实很简单。
只要一两步就可以完成。
下面就让我们一步步看看吧!
我们以WINDOWSXP为例(windows98、windows2000的方法和xp的一样)。
单击“开始”菜单,点击“运行”,如下图。
弹出“运行”对话框,输入"command"命令(不包括引号),点击“确定”。
弹出如下图的窗口。
输入“ipconfig /all”,然后“回车”。
出现如下图的显示。
这样我们就可以看到本机网卡的MAC地址了。
还有其它信息。
比如:“本机IP”、“子网掩码”、“默认网关”、“DNS”等。
首先看从C语音的几种方法比较起,看看如下,结果是获取IP和MAC码C#遍历局域网的几种方法及比较扫描局域网IP列表的几种方法很多软件都有获知局域网在线计算机IP的功能,但是在.net怎么实现呢,有好多方法,下面我给大家介绍几种,供大家参考。
1、微软社区上介绍了使用Active Directory 来遍历局域网利用DirectoryEntry组件来查看网络网址:/china/communITy/program/originalarticles/techdoc/DirectoryEntry.mspx private void EnumComputers(){using(DirectoryEntry root = new DirectoryEntry("WinNT:")){foreach(DirectoryEntry domain in root.Children){Console.WriteLine("Domain | WorkGroup: "+);foreach(DirectoryEntry computer in domain.Children){Console.WriteLine("Computer: "+);}}}}效果评价:速度慢,效率低,还有一个无效结果 Computer: Schema 使用的过程中注意虑掉。
2、利用Dns.GetHostByAddress和IPHostEntry遍历局域网private void EnumComputers(){for (int i = 1; i <= 255; i++){string scanIP = "192.168.0." + i.ToString();IPAddress myScanIP = IPAddress.Parse(scanIP);IPHostEntry myScanHost = null;trymyScanHost = Dns.GetHostByAddress(myScanIP);}catch{continue;}if (myScanHost != null){Console.WriteLine(scanIP+"|"+myScanHost.HostName);}}}效果评价:效率低,速度慢,不是一般的慢。
电脑mac地址查询方法第一篇:电脑MAC地址查询方法如果需要在电脑上查找MAC地址,可以按照以下步骤进行:步骤1:点击开始菜单并打开“运行”命令框。
步骤2:在“运行”框中输入“cmd”并点击“确定”按钮以打开命令提示符窗口。
步骤3:在命令提示符窗口中输入“ipconfig/all”并按下回车键以查找网络适配器的详细信息。
步骤4:在命令提示符窗口中查找“Physical Address”或“物理地址”项,这就是电脑的MAC地址。
注意:不同的电脑和操作系统可能会有不同的路径来查找MAC地址。
在一些操作系统中,你可以进入“网络和共享中心”并点击“查看状态”以查找该信息。
要牢记的是,每个网络适配器都有唯一的MAC地址,这个地址通常由12位十六进制数字组成,并以冒号或短横线分隔。
MAC地址是硬件层面的标识符,在网络中用于识别设备。
在连接到互联网或局域网时,你的电脑的网络适配器将会被配置一个IP地址。
如果你需要在网络中寻找特定的设备,MAC 地址可以提供一个更加稳定的识别符。
第二篇:如何修改电脑的MAC地址?如果你需要在电脑上修改MAC地址,可以按照以下步骤进行:步骤1:点击开始菜单并打开“运行”命令框。
步骤2:在“运行”框中输入“regedit”并点击“确定”按钮以打开注册表编辑器。
步骤3:使用注册表编辑器浏览到以下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cl ass\{4D36E972-E325-11CE-BFC1-08002BE10318}步骤4:在该路径下,你将会看到许多子项,每个子项对应一个网络适配器。
你需要找到那个你想要修改的网络适配器子项。
你可以查找子项中的“DriverDesc”或“描述”项以获得更多信息。
步骤5:打开该网络适配器子项,并找到“NetworkAddress”或“网络地址”项。
如果该项不存在,你可以创建一个新项并将数据类型设置为“字符串值”。
如何获取网卡的MAC地址获取网卡的MAC地址是一个常见的需求,在不同的操作系统中,可以使用不同的方法来获取。
下面将分别介绍在Windows、macOS和Linux系统中获取网卡MAC地址的方法。
在Windows系统中,可以通过以下步骤来获取网卡的MAC地址:1.打开「开始菜单」,在栏中输入「命令提示符」并打开命令提示符窗口。
2. 在命令提示符窗口中输入「ipconfig /all」并按下回车键。
3.系统会列出所有的网络适配器信息,包括网卡的物理地址(MAC地址)。
在相应的网络适配器部分,查找「物理地址」或「MAC地址」字段,即可找到对应的MAC地址。
在macOS系统中,可以通过以下步骤来获取网卡的MAC地址:1.打开「应用程序」文件夹,找到「实用工具」文件夹并进入。
2.打开「终端」应用程序。
3. 在终端中输入「ifconfig」并按下回车键。
4. 终端会列出所有的网络适配器信息,包括网卡的物理地址(MAC地址)。
在相应的网络适配器部分,查找「ether」字段,即可找到对应的MAC地址。
在Linux系统中,可以通过以下步骤来获取网卡的MAC地址:1.打开终端应用程序。
2. 输入以下命令并按下回车键:「ifconfig -a」或「ip link」。
3. 终端会列出所有的网络适配器信息,包括网卡的物理地址(MAC 地址)。
在相应的网络适配器部分,查找「ether」字段,即可找到对应的MAC地址。
除了以上的方法,还可以通过编程的方式来获取网卡的MAC地址。
不同编程语言提供了相应的API或库函数来获取网卡信息。
以下是使用Python编程语言获取MAC地址的示例代码:```pythonimport uuiddef get_mac_address(:mac = uuid.getnodemac_str = ':'.join(("%012X" % mac)[i:i+2] for i in range(0, 12, 2))return mac_strmac_address = get_mac_addressprint(mac_address)```这段代码使用了Python的uuid库中的getnode函数来获取网卡的MAC地址。
怎么获取局域网所有电脑MAC地址
为方便局域网管理,需要制作局域网设备MAC地址表来比对、核查。
那么如何获取局域网内所有电脑的MAC地址呢?具体请看下面店铺介绍的操作方法!
获取局域网所有电脑MAC地址的方法
方法1:set ip=192.168.1 && for /l %j in (1,1,254) do (ping %ip%.%j -n 1 -w 1000 ) && arp -a>1.txt
该方法适合在小IP地址范围内获取mac地址,因为如果范围过大,ping命令执行的时间会比较长,会造成早前arp地址表中获取的mac超时失效,从而无法获取局域网内完整的mac地址表。
如下图,分别是上属命令运行过程中的arp表内容,前、后表对比,很容易看出,部分mac地址已经丢失,而且还存在为全0的非真MAC地址。
方法2:set ip=192.168.1 && for /l %j in (1,1,254) do ( ping %ip%.%j -n 1 -w 1000 |arp -a %ip%.%j |findstr dynamic >>2.txt )
相对方法1,该方法应该是比较完美的。
在ping执行后,即时将获取的真实mac地址保存了下来。
END。
如何查看mac地址mac地址查询技巧 我们知道每块⽹卡都有⼀个特定的MAC地址,该地址是由⽹卡物理地址,是唯⼀的,因此在很多对⽹络安全很⾼的场合通常采⽤MAC地址作为识别⼀台电脑的标注,在路由器⾼级应⽤中我们可以在路由器中绑定指定电脑mac地址,从⽽实现某些指定的电脑可以实现上⽹,⼤⼤加强了⽹络安全,在⽆线路由器使⽤中应⽤尤其⼴泛,上⾯介绍的绑定mac地址,前提是需要知道所需要绑定电脑的mac地址,那么如何查看mac地址呢?以下详细介绍下。
mac地址查询⽅法有多种,以下笔者为⼤家介绍⼏种最简单常⽤的⽅法:⽅法⼀:使⽤ipconfig命令轻松查询电脑mac地址进⼊电脑桌⾯,从左下⾓的开始→运⾏,在运⾏命令框中输⼊cmd命令,之后回车进⼊cmd命令操作界⾯,在⾥⾯输⼊ipconfig /all回车即可看到⽹卡与本地IP等诸多⽹络设备相信信息,其中Physical Address名称后⾯显⽰的就是mac地址,如下图:开始运⾏输⼊cmd进⼊运⾏命令界⾯开始运⾏输⼊cmd进⼊运⾏命令界⾯进⼊运⾏命令窗⼝内部以后,我们直接输⼊ipconfig /all命令回车确认之后即可显⽰相关⽹卡信息,如下图中即可找到mac地址,如下图:ipconfig命令找到mac地址ipconfig命令找到mac地址⽅法⼆:通过本地连接查找mac地址进⼊电脑桌⾯,在电脑桌⾯右下⾓,我们可以看到⽹络标注,如下图:桌⾯右下⾓的⽹络标注桌⾯右下⾓的⽹络标注将⿏标放置在如上图所⽰的⽹络标注中,双击⿏标左键,会弹出“本地连接状态”界⾯,我们之后在本地连接状态框中切换到⽀持项,然后选择详细信息如下图:本地连接状态如上图,点击详细信息,弹出如下界⾯:⽹络连接详细信息中就可以找到mac地址⽹络连接详细信息中就可以找到mac地址如上图,在⽹络连接相信信息中的第⼀栏,实际地址后⾯的数值就是mac地址。
如何查看mac地址⽅法还有很多,⽐如不少系统开机系统显⽰器界⾯中也可以看到mac地址,每台电脑都有⼀个独⼀⽆⼆的mac地址,这主要有⽹卡⼚商提供,有兴趣的朋友⾃⼰去查查看⾃⼰电脑的MAC地址是多少。
Win2000、WinXP、Win2003获取MAC地址的方法:
地址的方法:
:如下图 在桌面上点击“开始”,再点击“运行”,键入cmd:如下图
点“确定”,键入ipconfig/all:如下图
:如下图
新开窗口底倒数第七行的6位字母组合**-**-**-**-**-**即
地址。
为您机器的MAC地址。
Win2000、WinXP、Win2003修改IP地址的方法:
地址的方法:
在桌面上点击“开始”,点击“控制面版”,点“网络连接”
:如下图
或“网络和拨号连接”:如下图
:如下图
右键点击“本地连接”,再点击“属性”:如下图
:如下图
点选“Internet 协议(Tcp/IP)”,点“属性”:如下图
在上图内按要求键入矿规定的IP地址。
其中子网掩码为:255.255.0.0,默认网关为:172.18.0.1,首选DNS服务器为:211.97.168.129,全矿统一。
,全矿统一。
Windows98/Win me 的ip 地址修改步骤:地址修改步骤:
右键打击右键打击网上邻居→属性网上邻居→属性
双击TCP/IP
出现修改IP 地址窗口:地址窗口:
在指定ip 地址项中填上地址项中填上指定的指定的IP 地址,子网掩码不变。
Windows98/windowsme 的MAC 地址查看步骤:地址查看步骤: 单击任务栏单击任务栏开始→运行开始→运行
在输入框中填入:winipcfg
出现如下窗口:出现如下窗口:
适配器地址后面的六段数字**-**-**-**-**-**就是本机网卡的MAC 地址。
计算机的MAC地址获取方法
MAC地址犹如公民身份证一样,每台上网的终端都有属於自己的唯一标识,通过MAC地址在局域网里实现传输。
这里小编给大家介绍如何获取计算机的MAC地址,希望可以帮到大家。
获取计算机的MAC地址的方法
同时按下电脑键盘上的win+R 键,弹出运行对话框;
在运行对话框中输入CMD 命令
在弹出的DOS环境中输入ipconfig /all,切记不要忘记中间的空格
查看本机的MAC地址,笔记本的电脑还会多一个无线网卡地址
END
看了“怎样获取计算机的MAC地址”的人还看了
1.如何获取局域网内所有电脑MAC地址
2.怎样获取电脑物理地址
3.局域网内如何获取远程电脑MAC地址
4.电脑mac地址查询的方法。
方法一:通过NetBIOS[Netbios is not supported on Windows Vista, Windows Server 2008, and subsequent versions of the operating system]#include <windows.h>#pragma comment(lib, "Netapi32.lib")namespace{bool GetAdapterInfo(int adapterNum, std::string& macOUT){NCB Ncb;memset(&Ncb, 0, sizeof(Ncb));Ncb.ncb_command = NCBRESET; // 重置网卡,以便我们可以查询Ncb.ncb_lana_num = adapterNum;if (Netbios(&Ncb) != NRC_GOODRET)return false;// 准备取得接口卡的状态块memset(&Ncb, sizeof(Ncb), 0);Ncb.ncb_command = NCBASTAT;Ncb.ncb_lana_num = adapterNum;strcpy((char *) Ncb.ncb_callname, "*");struct ASTAT{ADAPTER_STATUS adapt;NAME_BUFFER nameBuff[30];}adapter;memset(&adapter,sizeof(adapter), 0);Ncb.ncb_buffer = (unsigned char *)&adapter;Ncb.ncb_length = sizeof(adapter);if (Netbios(&Ncb) != 0)return false;char acMAC[32];sprintf(acMAC, "%02X-%02X-%02X-%02X-%02X-%02X",int (adapter.adapt.adapter_address[0]),int (adapter.adapt.adapter_address[1]),int (adapter.adapt.adapter_address[2]),int (adapter.adapt.adapter_address[3]),int (adapter.adapt.adapter_address[4]),int (adapter.adapt.adapter_address[5]));macOUT = acMAC;return true;}}bool GetMacByNetBIOS(std::string& macOUT){// 取得网卡列表LANA_ENUM adapterList;NCB Ncb;memset(&Ncb, 0, sizeof(NCB));Ncb.ncb_command = NCBENUM;Ncb.ncb_buffer = (unsigned char *)&adapterList;Ncb.ncb_length = sizeof(adapterList);Netbios(&Ncb);// 取得MACfor (int i = 0; i < adapterList.length; ++i){if (GetAdapterInfo(na[i], macOUT))return true;}return false;}参考:取得系统中网卡MAC地址的三种方法方法二:通过对控制台ipconfig /all命令重定向#include <Windows.h>#include <boost\regex.hpp>namespace{#if 0/// @brief 采用字符串查找来提取MAC地址/// @remark 该方法有很大局限性,并不是所有OS返回的MAC地址前导字符串都是/// "Physical Address. . . . . . . . . : "bool ParseMac(const std::string& str, std::string& macOUT){static const std::string beginMarkOfMAC("Physical Address. . . . . . . . . : ");static const std::string endMarkOfMAC("\r\n");size_t begin = str.find(beginMarkOfMAC);if(begin != std::string::npos){begin += beginMarkOfMAC.size();size_t end = str.find(endMarkOfMAC, begin);if(end != std::string::npos){macOUT = str.substr(begin, end - begin - 1);return true;}}return false;}#else/// @brief 采用boost::regex来提取MACbool ParseMac(const std::string& str, std::string& macOUT){const static boost::regex expression("([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-f A-F]{2})",boost::regex::perl | boost::regex::icase);boost::cmatch what;if(boost::regex_search(str.c_str(), what, expression)){macOUT = what[1] + "-" + what[2] + "-" + what[3] + "-" + what[4] + "-" + what[5] + "-" +what[6];return true;}return false;}#endif}bool GetMacByCmd(std::string& macOUT){bool ret = false;//初始化返回MAC地址缓冲区SECURITY_ATTRIBUTES sa;sa.nLength = sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor = NULL;sa.bInheritHandle = TRUE;//创建管道HANDLE hReadPipe,hWritePipe;if(CreatePipe(&hReadPipe, &hWritePipe, &sa, 0) == TRUE){//控制命令行窗口信息STARTUPINFO si;//返回进程信息PROCESS_INFORMATION pi;si.cb = sizeof(STARTUPINFO);GetStartupInfo(&si);si.hStdError = hWritePipe;si.hStdOutput = hWritePipe;si.wShowWindow = SW_HIDE; //隐藏命令行窗口si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;//创建获取命令行进程if (CreateProcess(NULL, "ipconfig /all", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi) == TRUE){WaitForSingleObject(pi.hProcess, 3000); // 设置超时时间,防止Vista、Win7等操作系统卡死unsigned long count;CloseHandle(hWritePipe);std::string strBuffer(1024 * 10, '\0'); // 准备足够大的缓冲区if(ReadFile(hReadPipe, const_cast<char*>(strBuffer.data()), strBuffer.size() - 1, &count, 0) == TRUE){strBuffer.resize(strBuffer.find_first_of('\0')); // 截掉缓冲区后面多余的'\0'ret = ParseMac(strBuffer, macOUT);//提取MAC地址串}CloseHandle(pi.hThread);CloseHandle(pi.hProcess);}CloseHandle(hWritePipe); // VS2010下调试,此处会有“An invalid handle was specified”的中断,直接运行正常,原因未知。
电脑mac地址怎么查
通俗地说,MAC就是电脑上网用的网卡。
MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置,表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。
在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。
因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。
MAC地址是网卡决定的,是固定的。
MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。
查询方法:
1、单击开始,点击运行,或者按下win(像windows图标的键)+R键的组合键,会弹出相应对话框。
2、在对话框中输入CMD,然后点击确定
3、会弹出代码编辑对话框
4、在代码光标停留的地方,输入ipconfig /all,按回车
5、在打开的信息中,物理地址那条记录就是电脑的MAC地址了。
C语言获取IP和MAC码首先看从C语音的几种方法比较起,看看如下,结果是获取IP和MAC码C#遍历局域网的几种方法及比较扫描局域网IP列表的几种方法很多软件都有获知局域网在线计算机IP的功能,但是在.net怎么实现呢,有好多方法,下面我给大家介绍几种,供大家参考。
1、微软社区上介绍了使用Active Directory 来遍历局域网利用DirectoryEntry组件来查看网络网址:/doc/6e3360479.html,/china/communITy/ program/originalarticles/techdoc/DirectoryEntry.mspx private void EnumComputers(){using(DirectoryEntry root = new DirectoryEntry("WinNT:")) {foreach(DirectoryEntry domain in root.Children){Console.WriteLine("Domain | WorkGroup: "+/doc/6e3360479.html,);foreach(DirectoryEntry computer in domain.Children){Console.WriteLine("Computer:"+/doc/6e3360479.html,);}}}}效果评价:速度慢,效率低,还有一个无效结果Computer: Schema 使用的过程中注意虑掉。
2、利用Dns.GetHostByAddress和IPHostEntry遍历局域网private void EnumComputers(){for (int i = 1; i <= 255; i++){string scanIP = "192.168.0." + i.ToString();IPAddress myScanIP = IPAddress.Parse(scanIP);IPHostEntry myScanHost = null;trymyScanHost = Dns.GetHostByAddress(myScanIP);}catch{continue;}if (myScanHost != null){Console.WriteLine(scanIP+"|"+myScanHost.HostName);}}}效果评价:效率低,速度慢,不是一般的慢。
获得MAC地址的四个方法1.使用WMI。
查询表Win32_NetworkAdapterConfiguration即可获得。
2.使用ARP协议。
请看这里。
3.使用Windows命令nbtstat,也就是通过NetBIOS。
请看这里。
4.查询SNMP(就是一种用于监视网络设备的协议)的MIB(管理信息数据库)。
但这不是一件简单的事情,需要自己创建SNMP包,发送到交换机,然后对返回的响应进行解析。
下面是代碼:using System;using System.Diagnostics;using System.Management;using ;using System.Runtime.InteropServices;using System.Text.RegularExpressions;namespace MACAddress{///<summary>/// MainClass 的摘要描述。
///</summary>internal class MainClass{///<summary>///應用程式的主進入點。
///</summary>[STAThread]private static void Main(string[] args){GetMACByWMI();IPAddress[] ips = GetLocalIP();foreach (IPAddress ip in ips){Console.WriteLine(GetMacByARP(ip.ToString()));string mac = GetRemoteMacByNetBIOS(ip.ToString());if ( mac.Length != 0 )Console.WriteLine(mac);elseConsole.WriteLine("Fail to get MACAddress by NetBIOS");GetMACBySNMP(ip.ToString(),"yourGroupName@yourVlanNumber");}Console.ReadLine();}By WMI#region By ARP[DllImport("Iphlpapi.dll")]private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, re f Int32 length);[DllImport("Ws2_32.dll")]private static extern Int32 inet_addr(string ip);public static string GetMacByARP(string clientIP){string ip = clientIP;Int32 ldest = inet_addr(ip);Int64 macinfo = new Int64();Int32 len = 6;try{SendARP(ldest, 0, ref macinfo, ref len);}catch{return "";}string originalMACAddress = Convert.ToString(macinfo, 16);if (originalMACAddress.Length < 12){originalMACAddress = originalMACAddress.PadLeft(12, '0');}string macAddress;if (originalMACAddress != "0000" && originalMACAddress.Length == 12){string mac1, mac2, mac3, mac4, mac5, mac6;mac1 = originalMACAddress.Substring(10, 2);mac2 = originalMACAddress.Substring(8, 2);mac3 = originalMACAddress.Substring(6, 2);mac4 = originalMACAddress.Substring(4, 2);mac5 = originalMACAddress.Substring(2, 2);mac6 = originalMACAddress.Substring(0, 2);macAddress = mac1 + "-" + mac2 + "-" + mac3 + "-" + mac4 + "-" + mac5 + "-" + mac6;}else{macAddress = "";}return macAddress.ToUpper();}public static IPAddress[] GetLocalIP(){string hostName = Dns.GetHostName();IPHostEntry ipEntry = Dns.GetHostByName(hostName);return ipEntry.AddressList;}#endregion#region By NetBIOSpublic static string GetRemoteMacByNetBIOS(string clientIP){string ip = clientIP;string dirResults = "";ProcessStartInfo psi = new ProcessStartInfo();Process proc = new Process();psi.FileName = "nbtstat.exe";//psi.RedirectStandardInput = false;psi.RedirectStandardOutput = true;psi.RedirectStandardError = true;psi.Arguments = "-A " + ip;eShellExecute = false;proc = Process.Start(psi);dirResults = proc.StandardOutput.ReadToEnd();string error = proc.StandardError.ReadToEnd();proc.WaitForExit();dirResults = dirResults.Replace("\r", "").Replace("\n", "").Replace("\t ", "");Regex reg = new Regex("Mac[ ]{0,}Address[ ]{0,}=[ ]{0,}(?((.)*?))__ MAC", RegexOptions.IgnoreCase | piled);Match mc = reg.Match(dirResults + "__MAC");if (mc.Success){return mc.Groups["key"].Value.ToUpper();}else{return "";}}#endregion#region By SNMPpublic static void GetMACBySNMP(string ip,string vlan){int commLength,mibLength,dataStart,dataLength;string nextMib,value;SNMP conn = new SNMP();string mib = "1.3.6.1.2.1.17.4.3.1.1";int orgMibLength = mib.Length;byte[] response = new byte[1024];nextMib = mib;while ( true){response = conn.Get("getnext",ip,vlan,nextMib);commLength = Convert.ToInt16(response[6]);mibLength = Convert.ToInt16(response[23+commLength]);dataLength = Convert.ToInt16(response[25+commLength+mibLengt h]);dataStart = 26 + commLength + mibLength;value = BitConverter.ToString(response,dataStart,dataLength);nextMib = conn.GetNextMIB(response);if ( !(nextMib.Substring(0,orgMibLength) == mib)){break;}Console.WriteLine("{0}={1}",nextMib,value);}}#endregion}}SNMP Classusing System;using ;using .Sockets;using System.Text;namespace MACAddress{/**////<summary>/// SNMP 的摘要描述。