精华内容
下载资源
问答
  • 如果您是通过网卡物理地址进行访问网络的,那么一定会碰到需要修改物理地址的情况。如更换新网卡网卡物理地址重复或者让笔记本电脑临时登陆一下网络等情况。更改网卡MAC地址的文章网络中有很多,但大都说的...
      

    如果您是通过网卡的物理地址进行访问网络的,那么一定会碰到需要修改物理地址的情况。如更换新网卡,网卡的物理地址重复或者让笔记本电脑临时登陆一下网络等情况。更改网卡MAC地址的文章网络中有很多,但大都说的不够详细,下面笔者试着以Windows XP操作系统为例介绍两种网卡MAC地址的修改方法,希望对大家有所帮助。

      简单的修改方法

      读者可以在桌面上的“网上邻居”图标上单击右键,选择“属性”,在弹出的“网络连接”的对话框中,在“本地连接”图标上单击右键,选择“属性”,会弹出一个“本地连接属性”的对话框,单击“配置”按钮,选择“高级”,选中左栏“属性”中“Network Address”(其实,并非所有的网卡,对物理地址的描述都用“Network Address”,如Intel的网卡便用“Locally Administered Address”来描述,只要在右栏框中可以找到“值”这个选项就可以了),

    然后选中右栏框“值”中的上面一个单选项(非“不存在”),此时便可在右边的框中输入想改的网卡MAC地址,形式如“000B6AF6F4F9”。点击“确定”按钮,修改就完成了。

     

     

      不过,有一些网卡没有这个选项,不要着急,可以先更新网卡的驱动程序试试,一般情况下,更新驱动之后都会出现这个选项。但是依然有特殊情况,无论怎么修改都没有这个选项,

    那怎么办呢?接着往下看,下面的方法可以说是万能的!

     

     

      注册表修改方法

      第1步,单击“开始”,选中“运行”,键入“regedit”调出注册表。

      第2步,在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0000、0001、0002 等主键下,查找 DriverDesc ,内容为要修改的网卡的描述,如Intel的网卡会被描述成“Intel(R) PRO/100+ Management Adapter”,3Com的网卡会被描述成“3Com EtherLink XL 10/100 PCI For Complete PC Management NIC (3C905C-TX)”等。

      注:上面提到的关于网卡描述的选项出现的位置,

    和网卡本身以及操作系统有关。不同的网卡可能出现在不同的主键下,而同一网卡用不同版本的操作系统(如OEM版,VOL或者VLK等)也会出现在不同的位置。而这一步的任务就是找到含有网卡描述的主键。

     

     

      第3步,选中在第二步找到的主键,在右栏框中添加一个字符串,命名为“Network Address”,其值设为要改的MAC地址,形式如“000B6AF6F4F9”。

      注:到这一步,修改网卡物理地址的任务可以说是完成了,有的网卡需要重启以下才能正常的工作,而有的只需一点点的时间“反应”一下而已。下面的几步是为了以后再修改物理地址方便用的,如果读者不再需要再次修改,到这里可以止步了。

      第4步,在“第一步选中的主键”/Ndi/params下添加一项名为“NetworkAddress”的主键,此时一般都会随着在右栏框中产生一个“(默认)”的字符串,将其值设置为最终想要修改的MAC地址,形式如“000B6AF6F4F9”。如果没有此字符串,读者也可自行添加此字符串。

      注:此步骤就是为网卡设置一个初始MAC地址。

      第5步,在“NetworkAddress”的主键下继续添加名为“ParamDesc”的字符串,其作用为指定“NetworkAddress”主键的描述,其值可自己命名,如“Network Address”,这样在网卡的高级属性中就会出现“Network Address”选项,

    就是刚在注册表中加的新项“NetworkAddress”,以后只要在此修改MAC地址就可以了。

     

      第6步,在“NetworkAddress”的主键下继续添加名为“Optional”的字符串,其值设为“1”,则以后在网卡的高级属性中选择“Network Address”项时,右边会出现“不存在”选项。

      第7步,重新启动计算机(不是一定要重新启动,但要视不同网卡的要求而定,不过,重启没有任何差错。),按照第一种方法找到“高级”选项就可发现此时“属性”栏中已有“Network Address”的选项,现在读者可以用来直接修改MAC地址或恢复原来的地址。

      以上两种修改方法保证读者可以修改任何网卡的物理地址,希望笔者的这点总结和心得可以帮助到你。

    展开全文
  • GetAdaptersAddresses是获取物理网卡的MAC,这里我们通过HOOK,随机的改变它,效果如下图,获取本节MAC可以采用精易模块的MAC_取本机MAC (1) GetAdaptersAddresses .版本 2 .DLL命令 GetAdaptersAddresses, ...

    GetAdaptersAddresses是获取物理网卡的MAC,这里我们通过HOOK,随机的改变它,效果如下图,获取本节MAC可以采用精易模块的MAC_取本机MAC (1)

    511遇见

    GetAdaptersAddresses

    .版本 2 
    .DLL命令 GetAdaptersAddresses, 整数型, "iphlpapi", "GetAdaptersAddresses"
        .参数 Family
        .参数 Flags
        .参数 Reserved
        .参数 AdapterAddresses
        .参数 SizePointer, , 传址

    hook

    .版本 2
     
    h.安装Hook (“iphlpapi.dll”, “GetAdaptersAddresses”, 到整数 (&macaddress))
    h.开始Hook ()

    macaddress回调

    我们采用了取随机字母来改变物理网课的MAC

    .版本 2
    .支持库 spec
     
    .子程序 macaddress, 整数型
    .参数 Family
    .参数 Flags
    .参数 Reserved
    .参数 AdapterAddresses, , 参考
    .参数 SizePointer, , 参考, 数据大小
    .局部变量 ret, 整数型
    .局部变量 buf, 字节集
    .局部变量 lodsiz, 整数型
    .局部变量 IPAA, IP_ADAPTER_ADDRESSES
    .局部变量 s, 整数型
    .局部变量 macdatee, 字节集
    .局部变量 MAC_S, 文本型, , "6"
     
    h.停止Hook ()
    lodsiz = SizePointer
    ret = GetAdaptersAddresses2 (Family, Flags, Reserved, AdapterAddresses, SizePointer)
     
    .如果真 (lodsiz ≠ 0)
        ' 在这里任意修改网卡信息。
     
        拷贝内存_IP_ADAPTER (IPAA, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA))
        拷贝内存_IP_ADAPTER (lens, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA))  ' 复制一个新的网卡数据组
     
        lens.pNext = 0
        ' MAC_S = { “1C”, “B7”, “2C”, “DD”, “FF”, “B1” }
        MAC_S [1] = 随机数母2 ()
        MAC_S [2] = 随机数母2 ()
        MAC_S [3] = 随机数母2 ()
        MAC_S [4] = 随机数母2 ()
        MAC_S [5] = 随机数母2 ()
        MAC_S [6] = 随机数母2 ()
     
        .计次循环首 (6, s)
            IPAA.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s])  ' 修改网卡1 的网卡mac
        .计次循环尾 ()
     
        .计次循环首 (6, s)
            lens.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s])  ' 修改网卡2 的网卡mac
        .计次循环尾 ()
     
        拷贝内存 (IPAA.pNext, lens, Len_IP_ADAPTER (IPAA))  ' 将之前拷贝出的新数据地址写入pNext 提供枚举获取
        拷贝内存 (取变量数据地址 (AdapterAddresses), IPAA, Len_IP_ADAPTER (IPAA))
     
    .如果真结束
    h.开始Hook ()
    返回 (ret)

    hook dll 源码

    我们也可以写一个注入的DLL,采用了EIP注入和远程线程注入来演示,以下是源码:

    .版本 2
    .支持库 spec
    hook ()
    _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
    返回 (0)  ' 返回值被忽略。
    .子程序 _临时子程序
     
    ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
     
    .子程序 hook, , 公开
     
    h.安装Hook (“iphlpapi.dll”, “GetAdaptersAddresses”, 到整数 (&macaddress))
    h.开始Hook ()
     
    .子程序 macaddress, 整数型
    .参数 Family
    .参数 Flags
    .参数 Reserved
    .参数 AdapterAddresses, , 参考
    .参数 SizePointer, , 参考
    .局部变量 ret, 整数型
    .局部变量 buf, 字节集
    .局部变量 lodsiz, 整数型
    .局部变量 IPAA, IP_ADAPTER_ADDRESSES
    .局部变量 s, 整数型
    .局部变量 macdatee, 字节集
    .局部变量 MAC_S, 文本型, , "6"
     
    h.停止Hook ()
    lodsiz = SizePointer
    ret = GetAdaptersAddresses (Family, Flags, Reserved, AdapterAddresses, SizePointer)
     
    .如果真 (lodsiz ≠ 0)
        ' 在这里任意修改网卡信息。
        拷贝内存_IP_ADAPTER (IPAA, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA))
        拷贝内存_IP_ADAPTER (lens, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA))  ' 复制一个新的网卡数据组
     
        lens.pNext = 0
        ' MAC_S = { “1C”, “B7”, “2C”, “DD”, “FF”, “B1” }
        MAC_S [1] = 随机字母数字 ()
        MAC_S [2] = 随机字母数字 ()
        MAC_S [3] = 随机字母数字 ()
        MAC_S [4] = 随机字母数字 ()
        MAC_S [5] = 随机字母数字 ()
        MAC_S [6] = 随机字母数字 ()
     
        .计次循环首 (6, s)
            IPAA.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s])  ' 修改网卡1 的网卡mac
        .计次循环尾 ()
     
        .计次循环首 (6, s)
            lens.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s])  ' 修改网卡2 的网卡mac
        .计次循环尾 ()
     
        拷贝内存 (IPAA.pNext, lens, Len_IP_ADAPTER (IPAA))  ' 将之前拷贝出的新数据地址写入pNext 提供枚举获取
        拷贝内存 (取变量数据地址 (AdapterAddresses), IPAA, Len_IP_ADAPTER (IPAA))
     
    .如果真结束
    h.开始Hook ()
    返回 (ret)
     
    .子程序 进制_十六到十, 长整数型, 公开, 将16进制文件转换到10进制数值(返回十进制数)
    .参数 文本, 文本型
    .局部变量 i, 整数型
    .局部变量 t, 文本型
    .局部变量 结果, 长整数型
    .局部变量 局_文本, 文本型
     
    t = “0123456789ABCDEF”
    局_文本 = 到大写 (文本)
    .计次循环首 (取文本长度 (文本), i)
        结果 = 结果 × 16 + 寻找文本 (t, 取文本中间 (局_文本, i, 1), , 假) - 1
    .计次循环尾 ()
    返回 (结果)
     
    .子程序 随机字母数字, 文本型
    .局部变量 tmp, 字节型, , "2"
    .局部变量 i, 整数型
    置随机数种子 ()
    .计次循环首 (2, i)
     
        tmp [i] = 取代码 (取文本中间 (“0123456789ABCDEF”, 取随机数 (1, 16), 1), )
        .判断开始 (取文本左边 (到文本 (tmp), 1) = “0”)
            tmp [i] = 取代码 (取文本中间 (“123456789ABCDEF”, 取随机数 (1, 15), 1), )
        .默认
        .判断结束
    .计次循环尾 ()
    返回 (到文本 (tmp))

    源码下载:http://www.511yj.com/eyuyan-hook-85.html

    展开全文
  • 快速修改网卡物理地址二则

    千次阅读 2008-05-19 17:56:00
    如果您是通过网卡物理地址进行访问网络的,那么一定会碰到需要修改物理地址的情况。如更换新网卡网卡物理地址重复或者让笔记本电脑临时登陆一下网络等情况。更改网卡MAC地址的文章网络中有很多,但大都说的...
     如果您是通过网卡的物理地址进行访问网络的,那么一定会碰到需要修改物理地址的情况。如更换新网卡,网卡的物理地址重复或者让笔记本电脑临时登陆一下网络等情况。更改网卡MAC地址的文章网络中有很多,但大都说的不够详细,下面笔者试着以Windows XP操作系统为例介绍两种网卡MAC地址的修改方法,希望对大家有所帮助。 
    

      简单的修改方法

      读者可以在桌面上的“网上邻居”图标上单击右键,选择“属性”,在弹出的“网络连接”的对话框中,在“本地连接”图标上单击右键,选择“属性”,会弹出一个“本地连接属 [img]http://adsp.online.sh.cn/04052704.gif[/img] ([url]http://ads.online.sh.cn/event.ng/Type=click&FlightID=2663&AdID=3291&TargetID=418&Segments=1[/url],89,442,899&Targets=126,418,864&Values=31,43,51,60,72,91,100,110,150,193,210,355,397,441,609,625&RawValues=&Redirect=http://www.sia.sh.cn/) 性”的对话框,单击“配置”按钮,选择“高级”,选中左栏“属性”中“Network Address”(其实,并非所有的网卡,对物理地址的描述都用“Network Address”,如Intel的网卡便用“Locally Administered Address”来描述,只要在右栏框中可以找到“值”这个选项就可以了),然后选中右栏框“值”中的上面一个单选项(非“不存在”),此时便可在右边的框中输入想改的网卡MAC地址,形式如“000B6AF6F4F9”。点击“确定”按钮,修改就完成了。

      不过,有一些网卡没有这个选项,不要着急,可以先更新网卡的驱动程序试试,一般情况下,更新驱动之后都会出现这个选项。但是依然有特殊情况,无论怎么修改都没有这个选项,那怎么办呢?接着往下看,下面的方法可以说是万能的!

      注册表修改方法

      第1步,单击“开始”,选中“运行”,键入“regedit”调出注册表。

      第2步,在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0000、0001、0002 等主键下,查找 DriverDesc ,内容为要修改的网卡的描述,如Intel的网卡会被描述成“Intel(R) PRO/100+ Management Adapter”,3Com的网卡会被描述成“3Com EtherLink XL 10/100 PCI For Complete PC Management NIC (3C905C-TX)”等。

      注:上面提到的关于网卡描述的选项出现的位置,和网卡本身以及操作系统有关。不同的网卡可能出现在不同的主键下,而同一网卡用不同版本的操作系统(如OEM版,VOL或者VLK等)也会出现在不同的位置。而这一步的任务就是找到含有网卡描述的主键。

      第3步,选中在第二步找到的主键,在右栏框中添加一个字符串,命名为“Network Address”,其值设为要改的MAC地址,形式如“000B6AF6F4F9”。

      注:到这一步,修改网卡物理地址的任务可以说是完成了,有的网卡需要重启以下才能正常的工作,而有的只需一点点的时间“反应”一下而已。下面的几步是为了以后再修改物理地址方便用的,如果读者不再需要再次修改,到这里可以止步了。

      第4步,在“第一步选中的主键”/Ndi/params下添加一项名为“NetworkAddress”的主键,此时一般都会随着在右栏框中产生一个“(默认)”的字符串,将其值设置为最终想要修改的MAC地址,形式如“000B6AF6F4F9”。如果没有此字符串,读者也可自行添加此字符串。

      注:此步骤就是为网卡设置一个初始MAC地址。

      第5步,在“NetworkAddress”的主键下继续添加名为“ParamDesc”的字符串,其作用为指定“NetworkAddress”主键的描述,其值可自己命名,如“Network Address”,这样在网卡的高级属性中就会出现“Network Address”选项,就是刚在注册表中加的新项“NetworkAddress”,以后只要在此修改MAC地址就可以了。

      第6步,在“NetworkAddress”的主键下继续添加名为“Optional”的字符串,其值设为“1”,则以后在网卡的高级属性中选择“Network Address”项时,右边会出现“不存在”选项。

      第7步,重新启动计算机(不是一定要重新启动,但要视不同网卡的要求而定,不过,重启没有任何差错。),按照第一种方法找到“高级”选项就可发现此时“属性”栏中已有“Network Address”的选项,现在读者可以用来直接修改MAC地址或恢复原来的地址。

    二:局域网大盗技术分析5--修改网卡的物理地址

    找了不少方法,也没有有效快捷的修改网卡物理地址的方法。因为网卡的物理地址实际上不可重复的,但是在window启动网络连接的时候,会读取注册表,如果在注册表设置了数据,就会将其写入网卡的eeprom中。所以最终我还是选择了修改注册表的方法来修改MAC地址。

    这段程序也来自网络,应该是个中国人写的,虽然我在国外网站上搜到的。再次感谢原作者和google。

    #Region "修改网卡的物理地址"
         Public Function ChangeMac(ByVal macs As String) As Boolean
             ApMAC = macs
             If IsOkay() = False Then
                 Return False
                 Exit Function
             End If
             Dim regKey As Microsoft.Win32.RegistryKey
             Dim Addr As String
             Addr = GetRoot(Form1.Lab_Wangka.Text)
             regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(Addr, True)
             regKey.SetValue("NetworkAddress", macs.Replace(":", ""))
             Return True
         End Function
         Private Function DoPadding(ByVal x As String) As String
             Dim Ret As String
             Dim z As Integer

             Ret = x
             If Len(x) < 4 Then
                 For z = 1 To 4 - Len(x)
                     Ret = "0" & Ret
                 Next
             End If

             Return Ret
         End Function
         Private Function GetRoot(ByVal Adapter As String) As String
             Dim regKey As Microsoft.Win32.RegistryKey
             Dim i As Integer = 0

             Do
                 Dim Root As String = "SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/"
                 Dim Last As String = DoPadding(i)
                 regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(Root & Last, True)

                 'Try
                 Dim cAdapter As String = regKey.GetValue("DriverDesc", "False").ToString()
                 If cAdapter = Adapter Then
                     Return Root & Last
                 End If
                 'Catch
                 '     Exit Do
                 'End Try
                 i += 1
             Loop


         End Function

         Private Function IsOkay() As Boolean
             If ApMAC = "" Then
                 MsgBox("You didn't enter a MAC Address", MsgBoxStyle.Critical)
                 Return False
             End If

             Dim ed As String = ApMAC.Replace(":", "")

             If ed.Length <> 12 Then
                 MsgBox("A MAC Address must have a length of 12", MsgBoxStyle.Critical)
                 Return False
             End If

             Try
                 If Form1.Lab_Wangka.Text = "" Then
                     MsgBox("No Network Adapter selected", MsgBoxStyle.Critical)
                     Return False
                 End If
             Catch
                 MsgBox("No Network Adapter selected", MsgBoxStyle.Critical)
                 Return False
             End Try


             Dim noerror As Boolean = True
             Dim i As Integer
             For i = 0 To ed.Length - 1
                 If IsHex(ed.Substring(i, 1)) = False Then
                     MsgBox("MAC Address in wrong format", MsgBoxStyle.Critical)
                     Return False
                 End If
             Next

             Return True
         End Function

         Private Function IsHex(ByVal l As String) As Boolean
             Dim table As String = "0123456789ABCDEF"
             Dim i As Integer
             For i = 0 To table.Length - 1
                 If l = table.Substring(i, 1) Then
                     Return True
                 End If
             Next
             Return False
         End Function
    #End Region

    展开全文
  • GetAdaptersInfo 可以获得本机所有网卡的信息,然而这些网卡可能包括虚拟网卡。例如,若安装了 VMWare 或者某些 VPN 客户端软件,则会出现若干虚拟网卡。它们在形式上与物理网卡几乎没有区别。 ipconfig 将它们与...
    GetAdaptersInfo 可以获得本机所有网卡的信息,然而这些网卡中可能包括虚拟网卡。例如,若安装了 VMWare 或者某些 VPN 客户端软件,则会出现若干虚拟网卡。它们在形式上与物理网卡几乎没有区别。 ipconfig 将它们与本地物理网卡等同对待。
    

    有些人建议使用 MAC 地址中的 "locally administread bit" 来区分。而事实证明这是靠不住的。 http://hi.baidu.com/xzq2000/blog ... cd762f07088b95.html
    是目前我找到的比较实用的办法。

    其原理是先由 GetAdaptersInfo 获取所有网卡的基本信息。然后利用网卡名去注册表中查找对应的硬件信息。若是物理网卡,其硬件信息中通常会包含 PCI 。

    例如,某个网卡的名为 {ACA306D0-1D69-4116-BC2B-919B428AD084}。
    他在注册表中的信息所在位置为: 
    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Network/{4D36E972-E325-11CE-BFC1-08002BE10318}/{ACA306D0-1D69-4116-BC2B-919B428AD084}/Connection

    若PnpInstanceID的值以PCI开头,说明是物理网卡,MediaSubType为01则是常见网卡,02为无线网卡。

    以下代码是从上述网页中转贴。该例中仅当网卡为有线物理网卡时才返回true.

    bool IsLocalAdapter ( const char *pAdapterName ) const
    ...{
        BOOL ret_value = FALSE;

    #define NET_CARD_KEY "System/CurrentControlSet/Control/Network/{4D36E972-E325-11CE-BFC1-08002BE10318}"
        char szDataBuf[MAX_PATH+1];
        DWORD dwDataLen = MAX_PATH;
        DWORD dwType = REG_SZ;
        HKEY hNetKey = NULL;
        HKEY hLocalNet = NULL;

        if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, NET_CARD_KEY, 0, KEY_READ, &hNetKey))
            return FALSE;
        sprintf(szDataBuf, "%s/Connection", pAdapterName);
        if(ERROR_SUCCESS != RegOpenKeyEx(hNetKey ,szDataBuf ,0 ,KEY_READ, &hLocalNet))
        ...{
            RegCloseKey(hNetKey);
            return FALSE;
        }
        if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, "MediaSubType", 0, &dwType, (BYTE *)szDataBuf, &dwDataLen))
        ...{
            goto ret;
        }
        if (*((DWORD *)szDataBuf)!=0x01)
            goto ret;
        dwDataLen = MAX_PATH;
        if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, ";PnpInstanceID", 0, &dwType, (BYTE *)szDataBuf, &dwDataLen))
        ...{
            goto ret;
        }
        if (strncmp(szDataBuf, ";PCI", strlen(";PCI")))
            goto ret;

        ret_value = TRUE;

    ret:
        RegCloseKey(hLocalNet);
        RegCloseKey(hNetKey);

        return ret_value!=0;

    }


    获得正确本地MAC地址,区分虚拟网卡



    void GetLocalMAC(char *buf)
    {
    IP_ADAPTER_INFO *IpAdaptersInfo =NULL;
    IP_ADAPTER_INFO *IpAdaptersInfoHead =NULL;

    IpAdaptersInfo = (IP_ADAPTER_INFO *) GlobalAlloc(GPTR, sizeof(IP_ADAPTER_INFO ));

    if (IpAdaptersInfo == NULL)
    {
      return;
    }

    DWORD dwDataSize = sizeof( IP_ADAPTER_INFO );
    DWORD dwRetVal = GetAdaptersInfo(IpAdaptersInfo,&dwDataSize);

    if ( ERROR_SUCCESS != dwRetVal)
    {
      GlobalFree( IpAdaptersInfo );
      IpAdaptersInfo = NULL;

      if( ERROR_BUFFER_OVERFLOW == dwRetVal)
      {
       IpAdaptersInfo =(IP_ADAPTER_INFO *) GlobalAlloc( GPTR, dwDataSize );
       if (IpAdaptersInfo == NULL)
       {
        return;
       }
       if ( ERROR_SUCCESS != GetAdaptersInfo( IpAdaptersInfo, &dwDataSize ))
       {
        GlobalFree( IpAdaptersInfo );
        return;
       }

      }
      else
      {
       return;
      }

    }

    //Save the head pointer of IP_ADAPTER_INFO structures list.
    IpAdaptersInfoHead = IpAdaptersInfo;

    do{
      if (IsLocalAdapter(IpAdaptersInfo->AdapterName))
      {
       sprintf(buf,"%02x-%02x-%02x-%02x-%02x-%02x",
        IpAdaptersInfo->Address[0],
        IpAdaptersInfo->Address[1],
        IpAdaptersInfo->Address[2],
        IpAdaptersInfo->Address[3],
        IpAdaptersInfo->Address[4],
        IpAdaptersInfo->Address[5]);
       //
       break;
      }

      IpAdaptersInfo = IpAdaptersInfo->Next;

    }while (IpAdaptersInfo);

    if (IpAdaptersInfoHead != NULL)
    {
      GlobalFree( IpAdaptersInfoHead );
    }
    }


    BOOL IsLocalAdapter(char *pAdapterName)
    {
    BOOL ret_value = FALSE;

    #define NET_CARD_KEY _T("System//CurrentControlSet//Control//Network//{4D36E972-E325-11CE-BFC1-08002BE10318}")
    char szDataBuf[MAX_PATH+1];
    DWORD dwDataLen = MAX_PATH;
    DWORD dwType = REG_SZ;
    HKEY hNetKey = NULL;
    HKEY hLocalNet = NULL;

    if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, NET_CARD_KEY, 0, KEY_READ, &hNetKey))
      return FALSE;
    wsprintf(szDataBuf, "%s//Connection", pAdapterName);
    if(ERROR_SUCCESS != RegOpenKeyEx(hNetKey ,szDataBuf ,0 ,KEY_READ, &hLocalNet))
    {
      RegCloseKey(hNetKey);
      return FALSE;
    }
    if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, "MediaSubType", 0, &dwType, (BYTE *)szDataBuf, &dwDataLen))
    {
      goto ret;
    }
    if (*((DWORD *)szDataBuf)!=0x01)
      goto ret;
    dwDataLen = MAX_PATH;
    if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, ";PnpInstanceID", 0, &dwType, (BYTE *)szDataBuf, &dwDataLen))
    {
      goto ret;
    }
    if (strncmp(szDataBuf, ";PCI", strlen(";PCI")))
      goto ret;

    ret_value = TRUE;

    ret:
    RegCloseKey(hLocalNet);
    RegCloseKey(hNetKey);

    return ret_value;
    }

    以前的那个无法区分虚拟网卡,所以在得到MAC地址时会出现大量重复的现象,非常麻烦,这个就没有问题了。

    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Network/{4D36E972-E325-11CE-BFC1-08002BE10318}/{ACA306D0-1D69-4116-BC2B-919B428AD084}/Connection
    网卡在注册表里的位置

    区分PnpInstanceID,如果前面有PCI就是本机的真实网卡,MediaSubType为01则是常见网卡,02为无线网卡。
    展开全文
  • Delphi代码获取网卡物理地址

    千次阅读 2007-11-03 21:57:00
    以下是我从MSDN中翻译过来的三个Delphi单元,调用任意一个单元中声明的API都可以获取网卡物理地址,但三个单元中的API函数的有效环境和功能各有不同,我把说明附于代码的注释中。unit Lmwksta;interfaceuses...
  • 如果您是通过网卡物理地址进行访问网络的,那么一定会碰到需要修改物理地址的情况。如更换新网卡网卡物理地址重复或者让笔记本电脑临时登陆一下网络等情况。更改网卡MAC地址的文章网络中有很多,但大都说的...
  • 快速修改网卡物理地址方法二则 zz

    千次阅读 2006-05-26 10:29:00
    作者: ∣来源:博客园综合区∣原文地址∣2005-11-9 如果您是通过网卡物理地址进行访问网络的,那么一定会碰到需要修改物理地址的情况。如更换新网卡网卡物理地址重复或者让笔记本电脑临时登陆一下网络等情况...
  • windows 7 网卡物理地址修改方法

    千次阅读 2011-01-11 00:13:00
    第2步: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0000、0001、0002 等主键下,查找 DriverDesc ,内容为要修改的网卡的描述,如Intel的网卡会被描述成...
  • ASP获取网卡物理地址(MAC)

    千次阅读 2007-02-13 14:46:00
    MAC,全称 Media Access Control Mac地址就是在媒体接入层上使用的地址,通俗点说就是网卡物理地址,现在的Mac地址一般都采用6字节48bit(在早期还有2字节16bit的Mac地址)。 对于MAC地址,由于我们不直接和它...
  • 以下是我从MSDN中翻译过来的三个Delphi单元,调用任意一个单元中声明的API都可以获取网卡物理地址,但三个单元中的API函数的有效环境和功能各有不同,我把说明附于代码的注释中。unit Lmwksta;interfaceuses...
  • Windows下读取网卡物理地址

    千次阅读 2007-07-01 23:38:00
    这个例子使用了J2SE5.0的ProcessBuilder类执行外部的程序,相对于 Runtime.exec ,它更方便,可以设置环境变量等。 ... import java .io.IOException; import java .io.InputStream;...Windows下读取网卡物理地址
  • 本地物理网卡的MAC地址。GetAdaptersInfo 可以获得本机所有网卡的信息,然而这些网卡可能包括虚拟网卡。例如,若安装了 VMWare 或者某些 VPN 客户端软件,则会出现若干虚拟网卡。它们在形式上与物理网卡几乎没有...
  • //获取远程客户端的网卡物理地址(MAC) public string GetMac(string IP) //para IP is the client's IP { string dirResults=""; ProcessStartInfo psi = new ProcessStartInfo(); Process proc = new Process(); ...
  • 2,ipconfig /all找网卡对应对应的物理地址。 转载请注明:云速博客www.ysidc.top» windows服务器获取网卡mac物理地址的简单方式 https://www.ysidc.top 云速博客,数据库,云速,虚拟主机,域名注册,域名,云服务器,...
  • 最后,在你的网络连接里边就会出现一个描述为microsoft loopback adapter的本地连接,就可以和真实的物理网卡一样配置ip地址,做实验了。 设置网卡的物地址 首先打开网络连接(右键“网上邻居” ...
  • JS获取客户端网卡物理地址(MAC)

    千次阅读 2007-03-06 08:41:00
    首先,我们知道手动查看MAC地址的方法有以下几种(我用的操作系统是Windows XP):1.点击菜单“开始—所有程序—附件—系统工具—系统信息”,接着在弹出的窗口中点击“组件-网络-适配器”,稍等片刻,我们就可以在...
  • Windows中轻松修改网卡MAC物理地址

    千次阅读 2007-03-22 13:54:00
    如今大家都是ADSL上网,当你查网费时就会发现,每次上网电信都会记录下你的网卡MAC地址,这是因为IP地址是动态的(每次上网都不同),而MAC地址却是不变的──每张网卡都有一个与众不同的MAC(物理)地址,因此MAC地址就...
  • 如何区分虚拟网卡物理网卡

    万次阅读 2016-10-08 23:58:47
    一、什么是物理网卡和虚拟网卡?图示如下:红色部分包含VMWare的为虚拟网卡。...场景二:通过抓包分析数据请求来源是物理网卡发出的数据包,还是虚拟网卡地址发出的包时候会用到。辨识都是通过mac地址区分的。 场
  • 如何区分虚拟网卡物理网卡

    千次阅读 2018-11-06 00:12:54
    如何区分虚拟网卡物理网卡
  • 区分虚拟网卡物理网卡

    千次阅读 2013-03-24 21:34:15
    本地物理网卡的MAC地址。 GetAdaptersInfo 可以获得本机所有网卡的信息,然而这些网卡可能包括虚拟网卡。例如,若安装了 VMWare 或者某些 VPN 客户端软件,则会出现若干虚拟网卡。它们在形式上与物理网卡几乎...
  • 新安装了 Ubuntu 6.06 LTS - the Dapper Drake - released in June ...首先修改网卡物理地址:1 打开文件: /etc/init.d/networking找到:case "$1" instart)在下面添加:ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX
  • 将一个物理网卡,虚拟多个网卡使用方法,在这块网卡上配置同一个段的ip地址: 比如将em2这块物理网卡(该网卡的ip地址192.168.100.10/24)配置成多块网卡的命令:  ifconfig em2:1 192.168.100.9/24 up   ...
  • 轻松修改网卡的MAC(物理地址

    千次阅读 2012-09-13 17:59:45
    如今大家都是ADSL上网,当你查网费时就会发现,每次上网电信都会记录下你的网卡MAC地址,这是因为IP地址是动态的(每次上网都不同),而MAC地址却是不变的──每张网卡都有一个与众不同的MAC(物理)地址,因此MAC...
  • Linux网卡攻略,修改Mac物理地址

    千次阅读 2014-06-03 20:47:18
    Linux系统下的网卡不像Windows那么支持完善,有时需要自己动手,本文总结了相关的驱动安装、命令行工具和测试网卡的负载等内容。 网卡驱动 http://downloadcenter.intel.com/ 安装包中README有详细说明,主要...
  • 一、判断网卡物理网卡,或者是虚拟网卡,有以下方式: WMI方式: /// <summary> /// Get:是否为物理网络适配器(WMI方式) /// </summary> /// <param name="nicKey">适配器标识值</...
  • 共享软件需要一个机器码,BIOS的ID号,有些主板查不到。所以有时需要用网卡的MAC做为机器码。 这份源码实现了以下两... 第一,可以识别网卡是不是真实的物理网卡; 第二,查到的是网卡的真实MAC,而不是注册表里的。
  • 以下代码枚举所有LANA号码,执行复位(NCBREST)和适配器状态(NCBASTAT)。 #include <windows.h> #include <wincon.h> #include <stdlib.h> #include...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,880
精华内容 23,952
关键字:

以下可能是网卡物理地址的是