如何获取MAC地址

如何获取MAC地址,第1张

获取MAC地址步骤如下:

1打开开始菜单,在搜索框输入 cmd 按回车键

2 输入ipconfig/all 按回车键

3显示的物理地址,即为MAC地址。

#include "stdafxh"

#include   <stdioh>   

#include   <stdlibh>   

#include   <>

为什么一定要用C语言呢?这个用C语言比较麻烦,需要的知识比较多,完全可以用更简单的办法啊。命令行上这样的命令“ipconfig -all | find "物理地址"”,可以很简单的就得到了。

如果是英文系统, 将“物理地址”换成“Physical Address”即可。

如果非的要用C语言,则可以先调用system函数, system("ipconfig -all | find \"物理地址\" > temptxt" ); 将mac地址信息存入临时文件temptxt;然后再从中提取。

一:问题:如何获得本机/远程主机的MAC地址,且不受 *** 作系统类型的限制,也不受本机和远程主机是否在同一个LAN中的限制。

二:解决的方法

注:就我所看到的有关“如何获得本机/远程主机的MAC地址”的方法总结如下。

这些方法及程序参考了本站及其他站点,以及用google搜索到的一些牛人的解法和源代码,我在此对他们深表感谢,在此就不说他们的大名了。

我所总结的方法和以及我写的代码一定存在许多不足,敬请各位同志斧正!!!

欢迎讨论!!!如果您认为值得转载的话,欢迎转载。

(一)获得本机的MAC地址

1:在WINDOWS 2000/XP下,使用ipconfig /all ,或者route print ,或者nbtstat 本机的IP地址;

2:在Linux/UNIX/类UNIX下,使用ifconfig;

3:自己写程序/参考牛人的程序实现,其原理可以参考arp协议;

(二)获得同一个LAN中主机的MAC地址

1:先ping目标主机,然后察看arp表,该方法不受 *** 作系统类型的限制;

2:在WINDOWS 2000/XP下,用nbtstat + 目标主机的IP地址;

3:在Linux下,用nbtstat + 目标主机的IP地址。(Linux系统本身没有提供,

但是在本站的“网络编程”版有一段用C语言写的原码,实现了WINDOWS下的nbtstat命令的部分功能。那段原码里面多了一个“}”符号);

注:2,3两种方法都只适合于目标主机是WINDOWS系统,且目标主机的137(135-139)端口是开放的。

4:自己写程序/参考牛人的程序实现,其原理可以参考arp协议;

(三)获得远程主机的MAC地址

1:在WINDOWS 2000/XP下,用nbtstat + 目标主机的IP地址;

2:在Linux下,用nbtstat + 目标主机的IP地址。(Linux系统本身没有提供,

但是在本站的“网络编程”版有一段用C语言写的原码,实现WINDOWS下的nbtstat命令的部分功能。那段原码里面多了一个“}”符号);

注:1,2两种方法都只适合于目标主机是WINDOWS系统,且目标主机的137(135-139)端口是开放的。

3:自己写程序/参考牛人的程序实现

三:我自己现在不是牛人,没有对问题给出一个圆满的解决方案。下面是我参考各位牛人的一些思想和源代码,在Java中通过系统调用实现的一段程序。该程序我已经在WINDOWS XP和RedHat Linux 90下测试通过。(要求系统只配了一个以太网卡,如有两块网卡,只能检测出其中的一块网卡的MAC地址,且可能造成显示的MAC/IP地址对与实际的MAC/IP地址对不符。)

目前百度或者谷歌到的方法有很多,不外乎就总结出来的1。调用客户端的WMI读取MAC地址2。通过某些网络协议抓取客户端的请求信息获取客户端的MAC地址第一种,都是基于ActiveX插件法获取客户端的信息,但是这种因为IE的安全级别问题,是无法做到通用的,包括建行等银行的U盾,网银行支付控件,支付宝控件都是一致的他们都是基于ActiveX的插件,从而控制B/S模式下客户端的 *** 作,这些方法在不同浏览器上就会有不同的BUG,所以目前来说支持这些ActiveX插件的就只有IE6,7,但是因为微软的IE浏览器自身的一些缺陷,导致ActiveX插件不稳定,比如说支付宝控件在IE7和IE8下,如果不是信任网站,则会造成IE崩溃,访问带有ActiveX插件的页面,IE就直接崩溃了。第二种,只是有人提及>

C++获取mac地址的代码:

#include <windowsh>

#include <stdlibh>

#include <stdioh>

#include <timeh>

/

Dev C++ -> include libnetapi32a

BCC 55 or VC++ -> #pragma comment(lib,"netapi32lib")

/

typedef struct _ASTAT_

{

ADAPTER_STATUS adapt;

NAME_BUFFER NameBuff [30];

} ASTAT, PASTAT;

void getMac(char mac)

{

ASTAT Adapter;

NCB Ncb;

UCHAR uRetCode;

LANA_ENUM lenum;

int i = 0;

memset(&Ncb, 0, sizeof(Ncb));

Ncbncb_command = NCBENUM;

Ncbncb_buffer = (UCHAR )&lenum;

Ncbncb_length = sizeof(lenum);

uRetCode = Netbios( &Ncb );

printf( "The NCBENUM return adapter number is: %d \n ", lenumlength);

for(i=0; i < lenumlength ; i++)

{

memset(&Ncb, 0, sizeof(Ncb));

Ncbncb_command = NCBRESET;

Ncbncb_lana_num = lenumlana[i];

uRetCode = Netbios( &Ncb );

memset(&Ncb, 0, sizeof(Ncb));

Ncbncb_command = NCBASTAT;

Ncbncb_lana_num = lenumlana[i];

strcpy((char )Ncbncb_callname, " ");

Ncbncb_buffer = (unsigned char ) &Adapter;

Ncbncb_length = sizeof(Adapter);

uRetCode = Netbios( &Ncb );

if (uRetCode == 0)

{

//sprintf(mac, "%02x-%02x-%02x-%02x-%02x-%02x ",

sprintf(mac, "%02X%02X%02X%02X%02X%02X ",

Adapteradaptadapter_address[0],

Adapteradaptadapter_address[1],

Adapteradaptadapter_address[2],

Adapteradaptadapter_address[3],

Adapteradaptadapter_address[4],

Adapteradaptadapter_address[5]

);

//printf( "The Ethernet Number on LANA %d is: %s\n ", lenumlana[i], mac);

}

}

}

int main(int argc, char argv[])

{

char mac=new char[32];

getMac(mac);

printf( "%s\n ", mac);

delete[]mac;

system( "PAUSE> NUL ");

return 0;

}

<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE>

<META >

以上就是关于如何获取MAC地址全部的内容,包括:如何获取MAC地址、这是一个获取mac地址的程序,这个程序能运行但是结果不正确,希望大神能帮忙看一下、如何用C语言获取网卡的mac地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9317231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存