大漠落日

while(!dead) study++;
posts - 46, comments - 126, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

window网络适配器信息获取

Posted on 2010-12-27 10:01 乱78糟 阅读(1977) 评论(0)  编辑 收藏 引用 所属分类: 重要资料
一、适配器信息,例如IP,MAC,GATEWAY,DNS,DHCP SERVER等等,可以通过 struct IP_ADAPTER_INFO 获取,MSDN例子:
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter 
= NULL;
DWORD dwRetVal 
= 0;

pAdapterInfo 
= (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
ulOutBufLen 
= sizeof(IP_ADAPTER_INFO);

// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
  GlobalFree (pAdapterInfo);
  pAdapterInfo 
= (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
}

if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
  pAdapter 
= pAdapterInfo;
  
while (pAdapter) {
    printf(
"\tAdapter Name: \t%s\n", pAdapter->AdapterName);
    printf(
"\tAdapter Desc: \t%s\n", pAdapter->Description);
    printf(
"\tAdapter Addr: \t%ld\n", pAdapter->Address);
    printf(
"\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
    printf(
"\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);

    printf(
"\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
    printf(
"\t***\n");
    
if (pAdapter->DhcpEnabled) {
      printf(
"\tDHCP Enabled: Yes\n");
      printf(
"\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
      printf(
"\tLease Obtained: %ld\n", pAdapter->LeaseObtained);
    }
    
else
      printf(
"\tDHCP Enabled: No\n");
    
    
if (pAdapter->HaveWins) {
      printf(
"\tHave Wins: Yes\n");
      printf(
"\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
      printf(
"\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
    }
    
else
      printf(
"\tHave Wins: No\n");
    pAdapter 
= pAdapter->Next;
  }
}
else {
  printf(
"Call to GetAdaptersInfo failed.\n");
}


二、网络连接名称等信息获取
   注册表位置(XP/WIN7下已经验证):HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\网络适配器名称\Connection\Name
   例如:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{0A033045-9AAC-4CEB-8394-6704E23D9B43}\Connection下可以查看到Name为“本地连接”
   HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{483C9FF8-503D-414B-B402-E4C1F1F568CB}\Connection    下可以查看到Name为“本地连接 2” 

   网络适配器名称可以通过IP_ADAPTER_INFO结构的 AdapterName 获取。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理