⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 枚举当前系统网卡 .txt

📁 会变语言实现的一些程序
💻 TXT
字号:
枚举当前系统网卡 
相关的例子:下载>>>  作者:LooL 于2007-11-16上传   

--------------------------------------------------------------------------------

By LooL

GetAdaptersInfo 功能返回当前电脑上的网络适配器信息

DWORD GetAdaptersInfo(
    PIP_ADAPTER_INFO pAdapterInfo, // 存放返回数据的缓冲
    PULONG pOutBufLen // 返回数据的大小
);

Parameters
pAdapterInfo 

[输出] 指向一个缓冲区,缓冲区中存放的是 IP_ADAPTER_INFO 结构组成的链表

pOutBufLen 

[输入] 指向一个 ULONG 变量,给出存放pAdapterInfo链表缓冲区大小。如果输入时给出的缓冲区比输出需求的小,则返回需要的大小,并返回ERROR_BUFFER_OVERFLOW错误

关于IP_ADAPTER_INFO 结构

IP_ADAPTER_INFO STRUCT DWORD
    Next dd ?    ;指向下一个IP_ADAPTER_INFO结构
    ComboIndex dd ?     ;保留
    AdapterName db MAX_ADAPTER_NAME_LENGTH + 4 dup (?) 
    ;适配器名称
    Description db MAX_ADAPTER_DESCRIPTION_LENGTH + 4 dup (?)
    ;适配器描述符
    AddressLength dd ?     ;适配器硬件地址描述符长度
    Address db MAX_ADAPTER_ADDRESS_LENGTH dup (?)
    ; 适配器硬件地址描述符
    Index dd ?     ;适配器编号
    uType dd ?     ;适配器类型
    DhcpEnabled dd ?     ;HDCP可用否
    CurrentIpAddress dd ?     ;保留(注意,这里不是当前IP地址)
    IpAddressList IP_ADDR_STRING <?>    ;IP地址
    GatewayList IP_ADDR_STRING <?>    ;GateWay地址
    DhcpServer IP_ADDR_STRING <?>;DHCP地址
    HaveWins dd ?     ;是否有Wins
    PrimaryWinsServer IP_ADDR_STRING <?>;首选Win Ip地址
    SecondaryWinsServer IP_ADDR_STRING <?>;备用Win IP地址
    LeaseObtained dd ?     ;HDCP获得日期时间
    LeaseExpires dd ? ;HDCP过期日期时间
IP_ADAPTER_INFO ENDS

需要说明的是 IpAddressList    IP_ADDR_STRING <?>     在IPv4下一个适配器可以有多个IP地址

IP_ADDR_STRING STRUCT
    Next dd    ? ;ptr to IP_ADDR_STRING
    IpAddress IP_ADDRESS_STRING <4*4 dup (?)>
    IpMask IP_MASK_STRING    <>
    Context dd    ?
IP_ADDR_STRING  ENDS

; 存放标准的IP地址,xxx.xxx.xxx.xxx
IP_ADDRESS_STRING STRUCT
    String    db    4*4 dup (?)
IP_ADDRESS_STRING  ENDS
 
;#Mode=CON
.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc

includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm

includelib   iphlpapi.lib
include   iphlpapi.inc

.data?
   lenBuffer   dd   ?
   pAdapterBuffer   dd   ?   
   buffer   db 100 dup(?)
.data
   szNextLine   db   0Ah,0Dh,0Ah,0Dh,0

.CODE
START:
   mov   lenBuffer, 1   ;给一个很小的buffer长度
   
   invoke   GetAdaptersInfo, addr buffer, addr lenBuffer
   .IF   eax==ERROR_NO_DATA
      jmp   @no_data
   .ELSEIF   eax==ERROR_BUFFER_OVERFLOW
      ;返回真正需要的大小在 lenBuffer
      invoke   GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, lenBuffer
      ;申请一块lenBuffer大小的空间
      mov   pAdapterBuffer, eax
   .ELSE
      jmp   @error
   .ENDIF
   
   ; --- Get adapter info in real buffer ---
   invoke   GetAdaptersInfo, pAdapterBuffer, addr lenBuffer
   .IF   eax==ERROR_NO_DATA
      jmp   @no_data
   .ELSEIF eax!=ERROR_SUCCESS
      jmp   @error
   .ENDIF
   
   ;遍历返回信息的结构体
   mov   edi, pAdapterBuffer
   assume   edi:PTR IP_ADAPTER_INFO
   .WHILE   edi
      invoke   wsprintf,addr buffer, CTXT("适配器名称: %s %s"),addr [edi].AdapterName,addr szNextLine
      invoke   StdOut,addr buffer
      
      lea   esi, [edi].IpAddressList   ;取这个结构体的地址
      ;注意这里是一个结构体,
      ;而不是指向一个结构体的指针
      ;具体的可以在这里输出esi看看它的地址,再输出GatewayList
      ;项的地址就明白了
      
      .WHILE   esi
         invoke   wsprintf,addr buffer,CTXT("适配器 IP : %s %s"),addr (IP_ADDR_STRING PTR [esi]).IpAddress,addr szNextLine
         invoke   StdOut,addr buffer
         mov   esi, (IP_ADDR_STRING PTR [esi]).Next
      .ENDW
      
      mov   edi, [edi].Next   ;指向下一个适配器
   .ENDW   
   assume edi:nothing
   
   invoke   GlobalFree, pAdapterBuffer   
   @no_data:
   @error:
   
   ;暂停显示,回车键关闭
   invoke StdIn,addr buffer,sizeof buffer
   invoke ExitProcess,0

end START 
 

运行结果:



XP/Vista 还支持一个更新的API GetAdaptersAddresses Function,这个调用的参数都是64位的,现在我还不知道如何调用,如果有朋友知道不妨拿出来一起讨论。

参考:
    1. 本文程序改编自 http://www.madwizard.org/view.php?page=downloads 中adapterinfo_beta.rar 程序;
    2. GetAdaptersInfo API的更具体说明请参考MSDN http://msdn2.microsoft.com/en-us/library/aa365917.aspx



--------------------------------------------------------------------------------
<<<上一篇  欢迎访问AoGo汇编小站:http://www.aogosoft.com 下一篇>>>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -