c++中的网络适配器信息
Network Adapter Information in C++
在Windows 8上,是否有任何标准函数可以在C中使用,以便获得系统中处理以太网的每个网络接口卡的IP地址和网络掩码列表?我能想到的获得此类信息的唯一其他方法是解析ipconfig
的输出,但我真的不想在c++中走那条路。
微软有一个叫做IP Helper API的东西。他们的文档非常全面,入门页包含一些基本示例。
下面是GetAdaptersInfo的一个例子:
编辑:在XP和更高版本,GetAdaptersInfo()
已被弃用,使用GetAdaptersAddresses()
代替(信用归Remy Lebeau)。
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while (pAdapter) {
printf("Adapter Name: %sn", pAdapter->AdapterName);
printf("Adapter Desc: %sn", pAdapter->Description);
printf("tAdapter Addr: t");
for (UINT i = 0; i < pAdapter->AddressLength; i++) {
if (i == (pAdapter->AddressLength - 1))
printf("%.2Xn",(int)pAdapter->Address[i]);
else
printf("%.2X-",(int)pAdapter->Address[i]);
}
printf("IP Address: %sn", pAdapter->IpAddressList.IpAddress.String);
printf("IP Mask: %sn", pAdapter->IpAddressList.IpMask.String);
printf("tGateway: t%sn", pAdapter->GatewayList.IpAddress.String);
printf("t***n");
if (pAdapter->DhcpEnabled) {
printf("tDHCP Enabled: Yesn");
printf("ttDHCP Server: t%sn", pAdapter->DhcpServer.IpAddress.String);
}
else
printf("tDHCP Enabled: Non");
pAdapter = pAdapter->Next;
}
这是关于提取网络参数的部分:
FIXED_INFO *pFixedInfo;
IP_ADDR_STRING *pIPAddr;
ULONG ulOutBufLen;
DWORD dwRetVal;
pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO));
ulOutBufLen = sizeof (FIXED_INFO);
if (GetNetworkParams(pFixedInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
free(pFixedInfo);
pFixedInfo = (FIXED_INFO *) malloc(ulOutBufLen);
if (pFixedInfo == NULL) {
printf("Error allocating memory needed to call GetNetworkParamsn");
}
}
printf("tHost Name: %sn", pFixedInfo->HostName);
printf("tDomain Name: %sn", pFixedInfo->DomainName);
printf("tDNS Servers:n");
printf("tt%sn", pFixedInfo->DnsServerList.IpAddress.String);
pIPAddr = pFixedInfo->DnsServerList.Next;
while (pIPAddr) {
printf("tt%sn", pIPAddr->IpAddress.String);
pIPAddr = pIPAddr->Next;
}
printf("tNode Type: ");
switch (pFixedInfo->NodeType) {
case 1:
printf("%sn", "Broadcast");
break;
case 2:
printf("%sn", "Peer to peer");
break;
case 4:
printf("%sn", "Mixed");
break;
case 8:
printf("%sn", "Hybrid");
break;
default:
printf("n");
}
printf("tNetBIOS Scope ID: %sn", pFixedInfo->ScopeId);
if (pFixedInfo->EnableRouting)
printf("tIP Routing Enabled: Yesn");
else
printf("tIP Routing Enabled: Non");
if (pFixedInfo->EnableProxy)
printf("tWINS Proxy Enabled: Yesn");
else
printf("tWINS Proxy Enabled: Non");
if (pFixedInfo->EnableDns)
printf("tNetBIOS Resolution Uses DNS: Yesn");
else
printf("tNetBIOS Resolution Uses DNS: Non");
还有GetInterfaceInfo
和更多。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 创建包装升压适配器的自定义范围类
- 在 C++20 中将多个范围适配器连接到一个范围中
- 递归应用 C++20 范围适配器会导致编译时无限循环
- Lambda 到函数指针适配器的理解
- 返回迭代器以提升适配器转换的容器
- 将 Kleene 运算符解析为一组替代方案,适配器? 与精神 x3
- Boost Range适配器制作集合
- 升压范围适配器
- DXGI 集成适配器
- 克隆设计模式适配器 - 避免切片子项(类似于原型模式)
- 如何以编程方式确定网络适配器在 Windows 上是否为虚拟适配器?
- 如何在C 中获取有关网络适配器物理的信息
- 如何在 C++/WinAPI 中按网络适配器获取发送/接收的字节数
- C++在 Windows 服务器 2008 r2 中禁用网络适配器的示例
- c++中的网络适配器信息
- UDP广播在机器上与多个网络适配器在Windows与本机c++
- 获取当前运行进程的网络适配器
- 在网络适配器中添加DNS条目