获取本地网卡适配器信息具体代码
效果如下:
具体代码如下:
#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;
}
您可能感兴趣的文章
- 01-10Linux C 获取进程退出值的实现代码
- 01-10解析Linux下的时间函数:设置以及获取时间的方法
- 01-10DHCP:解析开发板上动态获取ip的2种实现方法详解
- 01-10基于linux下获取时间函数的详解
- 01-10linux c 获取本机公网IP的实现方法
- 01-10用c 获取文件MD5值的实现方法
- 01-10使用C语言中的time函数获取系统时间
- 01-10linux c程序中获取shell脚本输出的实现方法
- 01-10c++获取进程信息列表和进程所调用的dll列表
- 01-10C++获取任务栏打开程序窗口示例
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10C#中split用法实例总结
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10delphi制作wav文件的方法
- 01-11ajax实现页面的局部加载
- 01-10SublimeText编译C开发环境设置
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 04-02jquery与jsp,用jquery