获取本地网卡适配器信息
2013-12-30 22:20
190 查看
效果如下:
![](http://images.cnitblog.com/blog/521191/201312/30221906-d02eac190c1546569f2a309d8e4d5f80.jpg)
具体代码如下:
![](http://images.cnitblog.com/blog/521191/201312/30221906-d02eac190c1546569f2a309d8e4d5f80.jpg)
具体代码如下:
#include <Windows.h> #include <IPHlpApi.h> #include <stdio.h> #pragma comment(lib, "IPHlpApi") #pragma comment(lib, "ws2_32") int main(int argc, char **argv) { PIP_ADAPTER_INFO pAdapterInfo = NULL; ULONG ulLen = sizeof(IP_ADAPTER_INFO); struct tm newtime; char szBuffer[32]; errno_t error; //为适配器结构申请内存 //pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, ulLen); pAdapterInfo = (PIP_ADAPTER_INFO)HeapAlloc(GetProcessHeap(), 0, sizeof(IP_ADAPTER_INFO)); if (NULL == pAdapterInfo) { printf("Error allocating memory needed to call GetAdaptersInfo.\n"); return 1; } if (ERROR_BUFFER_OVERFLOW == GetAdaptersInfo(pAdapterInfo, &ulLen)) { HeapFree(GetProcessHeap(), 0, pAdapterInfo); pAdapterInfo = (PIP_ADAPTER_INFO)HeapAlloc(GetProcessHeap(), 0, ulLen); if (NULL == pAdapterInfo) { printf("Error allocating memory needed to call GetAdaptersInfo.\n"); return 1; } } //取得本地适配器结构信息 if (ERROR_SUCCESS != GetAdaptersInfo(pAdapterInfo, &ulLen)) { printf("GetAdaptersInfo error!\n"); return 0; } if (NULL == pAdapterInfo) { printf("There is no adapters!\n"); return 0; } SetConsoleTitle(TEXT("本地网卡适配器信息")); do { printf("ComboIndex:%d\n", pAdapterInfo->ComboIndex); printf("Adapter Name:%s\n", pAdapterInfo->AdapterName); printf("Adapter Desc:%s\n", pAdapterInfo->Description); printf("Adapter Addr:"); for (size_t i = 0; i < pAdapterInfo->AddressLength; i++) { if (i == (pAdapterInfo->AddressLength - 1)) { printf("%02X", (int)pAdapterInfo->Address[i]); } else { printf("%02X-", (int)pAdapterInfo->Address[i]); } } printf("\n"); printf("Index:%d\n", pAdapterInfo->Index); printf("Type:"); switch (pAdapterInfo->Type) { case MIB_IF_TYPE_OTHER:printf("Other\n"); break; case MIB_IF_TYPE_ETHERNET:printf("Ethernet\n"); break; case MIB_IF_TYPE_TOKENRING:printf("Token Ring\n"); break; case MIB_IF_TYPE_FDDI:printf("FDDI\n"); break; case MIB_IF_TYPE_PPP:printf("PPP\n"); break; case MIB_IF_TYPE_LOOPBACK:printf("Lookback\n"); break; case MIB_IF_TYPE_SLIP:printf("Slip\n"); break; default:printf("Unknow type %ld\n", pAdapterInfo->Type); break; } printf("IP Address:%s\n", pAdapterInfo->IpAddressList.IpAddress.String); printf("IP Mask:%s\n", pAdapterInfo->IpAddressList.IpMask.String); printf("Gateway:%s\n", pAdapterInfo->GatewayList.IpAddress.String); if (pAdapterInfo->DhcpEnabled) { printf("DHCP Enabled:Yes\n"); printf("DHCP Server:%s\n", pAdapterInfo->DhcpServer.IpAddress.String); printf("Lease Obtained:"); error = _localtime32_s(&newtime, (__time32_t*)&pAdapterInfo->LeaseObtained); if (error) { printf("Invalid Argument to _localtime32_s.\n"); } else { error = asctime_s(szBuffer, 32, &newtime); if (error) { printf("Invalid Argument to asctime_s.\n"); } else { printf("%s", szBuffer); } } printf("Lease Expires:"); error = _localtime32_s(&newtime, (__time32_t*)&pAdapterInfo->LeaseExpires); if (error) { printf("Invalid Argument to _localtime32_s.\n"); } else { error = asctime_s(szBuffer, 32, &newtime); if (error) { printf("Invalid Argument to asctime_s.\n"); } else { printf("%s", szBuffer); } } } else { printf("DHCP Enabled:No\n"); } if (pAdapterInfo->HaveWins) { printf("Have Wins:Yes\n"); printf("Primary Wins Server:%s\n", pAdapterInfo->PrimaryWinsServer.IpAddress.String); printf("Secondary Wins Server:%s\n", pAdapterInfo->SecondaryWinsServer.IpAddress.String); } else { printf("Have Wins:No\n"); } printf("=================================================================\n"); pAdapterInfo = pAdapterInfo->Next; } while (pAdapterInfo); if (pAdapterInfo) { HeapFree(GetProcessHeap(), 0, pAdapterInfo); } return 0; }
相关文章推荐
- 哈夫曼编码-数据结构实验
- Linux(centos)系统各个目录的作用详解
- [SharpMap] 屏幕坐标和Map坐标转换
- 基于感知Hash算法的视觉目标跟踪
- Java学习——面对对象的思想入门
- 利用expect脚本结合bash脚本批量修改主机名
- WITH AS and materialize hints
- Android打开应用程序安装界面
- 初识Mapr(三)——规划集群
- WITH AS and materialize hints
- web.xml的说明
- Linux系统下如何查看及修改文件读写权限
- 封装JAVA数据库操作
- inotify+rsync+mutt+msmtp 实现数据自动更新并且实现发邮件给管理员
- go语言与excel的序列化与反序列化(1)
- Build kernel
- 一个奇怪的Bug“Unable to create application ”
- oracle 11G导出空表
- linux i2c 驱动之二
- 现象:物化视图对update不更新