哪种方法获取Mac 地址

哪种方法获取Mac 地址,第1张

1NDIS(DDK)通过驱动程序获取MAC地址

ndis规范中说明,网卡驱动程序支持ioctl_ndis_query_stats接口

参数如下:

OID_802_3_PERMANENT_ADDRESS :物理地址

OID_802_3_CURRENT_ADDRESS :mac地址

于是我们的方法就得到了。

首先,看看注册表,找一找网卡有几块,分别是什么设备名。

具体位置和os有关,2000下在hlm/software/microsoft/windows nt/current version/networkcards。

然后createfile(devicename,)注意,要用linkname,因此

还要加上"//////device//"

接着

deviceiocontrol(hmac,IOCTL_NDIS_QUERY_STATS,

OID_802_3_PERMANENT_ADDRESS/OID_802_3_CURRENT_ADDRESS)

具体的情况可以参看ddk下的

OID_802_3_CURRENT_ADDRESS条目

2NetAPI-2得到MAC (MSDN推荐方法)

#include <windowsh>

//#include <winconh>

#include <stdlibh>

#include <stdioh>

#include <timeh>

typedef struct _ASTAT_

{

ADAPTER_STATUS adapt;

NAME_BUFFER NameBuff [30];

}ASTAT, PASTAT;

ASTAT Adapter;

int main (void)

{

NCB Ncb;

UCHAR uRetCode;

char NetName[50];

LANA_ENUM lenum;

int i;

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

Ncbncb_command = NCBENUM;

Ncbncb_buffer = (UCHAR )&lenum;

Ncbncb_length = sizeof(lenum);

uRetCode = Netbios( &Ncb );

printf( "The NCBENUM return code is: 0x%x /n", uRetCode );

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

{

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

Ncbncb_command = NCBRESET;

Ncbncb_lana_num = lenumlana;

uRetCode = Netbios( &Ncb );

printf( "The NCBRESET on LANA %d return code is: 0x%x /n",

lenumlana, uRetCode );

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

Ncbncb_command = NCBASTAT;

Ncbncb_lana_num = lenumlana;

strcpy( Ncbncb_callname, " " );

Ncbncb_buffer = (char ) &Adapter;

Ncbncb_length = sizeof(Adapter);

uRetCode = Netbios( &Ncb );

printf( "The NCBASTAT on LANA %d return code is: 0x%x /n",

lenumlana, uRetCode );

if ( uRetCode == 0 )

{

printf( "The Ethernet Number on LANA %d is:%02x%02x%02x%02x%02x%02x/n",

lenumlana,

Adapteradaptadapter_address[0],

Adapteradaptadapter_address[1],

Adapteradaptadapter_address[2],

Adapteradaptadapter_address[3],

Adapteradaptadapter_address[4],

Adapteradaptadapter_address[5] );

}

}

}

3用COM API获取网卡MAC地址

这种方法使用COM API创建一个GUID(全局唯一标识符)并从那里继承MAC地址。

GUID通常用来标识COM组件以及系统中的其他对象。它们是由MAC地址(结合其他东西)计算得来的,表面上MAC地址就包含在其中。

我说表面上是因为事实上并没有包含。我提供这种方法更多的是为了作为反面教材。您也许用这种方法能够得到MAC地址,但

有时候您只会得到随机的十六进制数值。下面的例子十分简单,无需多讲。我们使用CoCreateGuid创建GUID,并将最后六个字节

放入字符串中。它们可能是MAC地址,但并不是必然的。

uuidcpp

#include <windowsh>

#include <iostream>

#include <conioh>

using namespace std;

int main()

{

cout << "MAC address is: ";

// 向COM要求一个UUID。如果机器中有以太网卡,

// UUID最后的六个字节(Data4的2-7字节)应该是本地以太网卡的MAC地址。

GUID uuid;

CoCreateGuid(&uuid);

// Spit the address out

char mac_addr[18];

sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X",

uuidData4[2],uuidData4[3],uuidData4[4],

uuidData4[5],uuidData4[6],uuidData4[7]);

cout << mac_addr << endl;

getch();

return 0;

}

4用NetAPI来获取网卡MAC地址

首先在头文件定义中加入#include "nb30h"

#pragma comment(lib,"netapi32lib")

typedef struct _ASTAT_

{

ADAPTER_STATUS adapt;

NAME_BUFFER NameBuff[30];

} ASTAT, PASTAT;

就可以这样调用来获取远程网卡MAC地址了:

CString GetMacAddress(CString sNetBiosName)

{

ASTAT Adapter;

NCB ncb;

UCHAR uRetCode;

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

ncbncb_command = NCBRESET;

ncbncb_lana_num = 0;

uRetCode = Netbios(&ncb);

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

ncbncb_command = NCBASTAT;

ncbncb_lana_num = 0;

sNetBiosNameMakeUpper();

FillMemory(ncbncb_callname, NCBNAMSZ - 1, 0x20);

strcpy((char )ncbncb_callname, (LPCTSTR) sNetBiosName);

ncbncb_callname[sNetBiosNameGetLength()] = 0x20;

ncbncb_callname[NCBNAMSZ] = 0x0;

ncbncb_buffer = (unsigned char ) &Adapter;

ncbncb_length = sizeof(Adapter);

uRetCode = Netbios(&ncb);

CString sMacAddress;

if (uRetCode == 0)

{

sMacAddressFormat(_T("%02x%02x%02x%02x%02x%02x"),

Adapteradaptadapter_address[0],

Adapteradaptadapter_address[1],

Adapteradaptadapter_address[2],

Adapteradaptadapter_address[3],

Adapteradaptadapter_address[4],

Adapteradaptadapter_address[5]);

}

return sMacAddress;

}

<%

dim remoteaddr

if RequestServerVariables(">

<php       

    class GetMacAddr{

            var $return_array = array(); // 返回带有MAC地址的字串数组

            var $mac_addr;

            function GetMacAddr($os_type){

                    switch(strtolower($os_type)){   

                            case "linux":$this->forLinux();break;

                            default:$this->forWindows();break;

                    }   

                    $temp_array = array();   

                    foreach ( $this->return_array as $value ){   

                            if ( preg_match( "/[0-9a-f][0-9a-f][:-]""[0-9a-f][0-9a-f][:-]""[0-9a-f][0-9a-f][:-]""[0-9a-f][0-9a-f][:-]""[0-9a-f][0-9a-f][:-]""[0-9a-f][0-9a-f]/i", $value, $temp_array ) ) {   

                                    $this->mac_addr = $temp_array[0];   

                                    break;   

                            }   

                    }   

                    unset($temp_array);   

                    return $this->mac_addr;   

            }  

            function forWindows()   {   

                    @exec("ipconfig /all", $this->return_array);   

                    if ( $this->return_array )   

                            return $this->return_array;   

                    else{   

                            $ipconfig = $_SERVER["WINDIR"]"\system32\ipconfigexe";   

                            if ( is_file($ipconfig) )   

                                    @exec($ipconfig" /all", $this->return_array);   

                            else  

                                    @exec($_SERVER["WINDIR"]"\system\ipconfigexe /all", $this->return_array);   

                            return $this->return_array;   

                    }   

            }   

      }   

   //---实例化类

    $mac = new GetMacAddr(PHP_OS);   

    echo $mac->mac_addr;   

    echo "<br />";   

    echo md5($mac->mac_addr);        

    > 

以上代码是获取mac地址的代码,在网上抄的,但实测有效,括号,我x,我第一次知道原来php也可以执行命令行。。。

至于如何限制,应该是去截取mac的一部分经行if判断就可以了,你先尝试一下,仍有问题追问即可

方法一、在桌面上的“网上邻居”图标上单击右键,选择“属性”,在d出的“网络连接”的对话框中,在“本地连接”图标上单击右键,选择“属性”,会d出一个“本地连接属性”的对话框,单击“配置”按钮,选择“高级”,选中左栏“属性”中“Network Address”

本程序属于一种特别的方法 使用范围比较有限 而且有一定的危险性 借鉴了asp后门里的一些方法 下面是程序代码 <%dim remoteaddrif Request ServerVariables( >

以上就是关于哪种方法获取Mac 地址全部的内容,包括:哪种方法获取Mac 地址、如何在ASP程序中,取到客户端的MAC地址,IP地址已经取到了、php如何获取客户端的mac地址限制登录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/10119633.html

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

发表评论

登录后才能评论

评论列表(0条)

保存