博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[100分求助]如何使用VC编程获取网卡当前的状态 - IT者
阅读量:2400 次
发布时间:2019-05-10

本文共 3822 字,大约阅读时间需要 12 分钟。

导读:

至少需要获取:
1、当前速度
2、是全双工的,还是半双工的
3、是否是自适应的
网友回复:SetupDiEnumDeviceInterfaces

你查下,我觉得应该可以

网友回复:用GetIfTable函数
网友回复:SetupDiEnumDeviceInterfaces

网友回复:up

网友回复:引用 1 楼 greatws 的回复:
SetupDiEnumDeviceInterfaces

你查下,我觉得应该可以

 

这是驱动级别使用的API吧.

网友回复:引用楼主 aopha 的帖子:
至少需要获取:
1、当前速度
2、是全双工的,还是半双工的
3、是否是自适应的
 

MSDN的代码

include
#include

#include

#include

#include

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))

#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */

int main()

{

// Declare and initialize variables.

DWORD dwSize = 0;

DWORD dwRetVal = 0;

int i, j;

/* variables used for GetIfTable and GetIfEntry */

MIB_IFTABLE *pIfTable;
MIB_IFROW *pIfRow;

// Allocate memory for our pointers.

pIfTable = (MIB_IFTABLE *) MALLOC(sizeof (MIB_IFTABLE));
if (pIfTable == NULL) {
printf("Error allocating memory needed to call GetIfTable/n");
return 1;
}
// Make an initial call to GetIfTable to get the
// necessary size into dwSize
dwSize = sizeof (MIB_IFTABLE);
if (GetIfTable(pIfTable, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER) {
FREE(pIfTable);
pIfTable = (MIB_IFTABLE *) MALLOC(dwSize);
if (pIfTable == NULL) {
printf("Error allocating memory needed to call GetIfTable/n");
return 1;
}
}
// Make a second call to GetIfTable to get the actual
// data we want.
if ((dwRetVal = GetIfTable(pIfTable, &dwSize, FALSE)) == NO_ERROR) {
printf("/tNum Entries: %ld/n/n", pIfTable->dwNumEntries);
for (i = 0; i < (int) pIfTable->dwNumEntries; i ) {
pIfRow = (MIB_IFROW *) & pIfTable->table[i];
printf("/tIndex[%d]:/t %ld/n", i, pIfRow->dwIndex);
printf("/tInterfaceName[%d]:/t %ws", i, pIfRow->wszName);
printf("/n");
printf("/tDescription[%d]:/t ", i);
for (j = 0; j < (int) pIfRow->dwDescrLen; j )
printf("%c", pIfRow->bDescr[j]);
printf("/n");
printf("/tType[%d]:/t ", i);
switch (pIfRow->dwType) {
case IF_TYPE_OTHER:
printf("Other/n");
break;
case IF_TYPE_ETHERNET_CSMACD:
printf("Ethernet/n");
break;
case IF_TYPE_ISO88025_TOKENRING:
printf("Token Ring/n");
break;
case IF_TYPE_PPP:
printf("PPP/n");
break;
case IF_TYPE_SOFTWARE_LOOPBACK:
printf("Software Lookback/n");
break;
case IF_TYPE_ATM:
printf("ATM/n");
break;
case IF_TYPE_IEEE80211:
printf("IEEE 802.11 Wireless/n");
break;
case IF_TYPE_TUNNEL:
printf("Tunnel type encapsulation/n");
break;
case IF_TYPE_IEEE1394:
printf("IEEE 1394 Firewire/n");
break;
default:
printf("Unknown type %ld/n", pIfRow->dwType);
break;
}
printf("/tMtu[%d]:/t/t %ld/n", i, pIfRow->dwMtu);
printf("/tSpeed[%d]:/t %ld/n", i, pIfRow->dwSpeed);
printf("/tPhysical Addr:/t ");
if (pIfRow->dwPhysAddrLen == 0)
printf("/n");
for (j = 0; j < (int) pIfRow->dwPhysAddrLen; j ) {
if (j == (pIfRow->dwPhysAddrLen - 1))
printf("%.2X/n", (int) pIfRow->bPhysAddr[j]);
else
printf("%.2X-", (int) pIfRow->bPhysAddr[j]);
}
printf("/tAdmin Status[%d]:/t %ld/n", i, pIfRow->dwAdminStatus);
printf("/tOper Status[%d]:/t ", i);
switch (pIfRow->dwOperStatus) {
case IF_OPER_STATUS_NON_OPERATIONAL:
printf("Non Operational/n");
break;
case IF_OPER_STATUS_UNREACHABLE:
printf("Unreachable/n");
break;
case IF_OPER_STATUS_DISCONNECTED:
printf("Disconnected/n");
break;
case IF_OPER_STATUS_CONNECTING:
printf("Connecting/n");
break;
case IF_OPER_STATUS_CONNECTED:
printf("Connected/n");
break;
case IF_OPER_STATUS_OPERATIONAL:
printf("Operational/n");
break;
default:
printf("Unknown status %ld/n", pIfRow->dwAdminStatus);
break;
}
printf("/n");
}
} else {
printf("GetIfTable failed with error: /n", dwRetVal);
if (pIfTable != NULL) {
FREE(pIfTable);
pIfTable = NULL;
}
return 1;
// Here you can use FormatMessage to find out why
// it failed.
}
if (pIfTable != NULL) {
FREE(pIfTable);
pIfTable = NULL;
}
return 0;
}

 

网友回复:mark

网友回复:mark
up
网友回复:操作系统应该提供了API,查查肯定有的!
网友回复:学习
up
网友回复:6楼的方法不错,学习了
网友回复:多谢各位大虾!
明天验证一下,满足要求给分。
不过6楼的方法中好像仅能获取速度,那双工还是半双工,是否自适应如何得到?

本篇文章来源于 IT者网站  原文链接:

本文转自

转载地址:http://zniob.baihongyu.com/

你可能感兴趣的文章
自动化平台中维度设计的一点思考
查看>>
运维开发的痛点和思考
查看>>
自动化分享里程碑小结20180127
查看>>
对这个公众号的分析和期望
查看>>
疯狂的十天计划开启(二) (改)
查看>>
自动化运维平台的流程草图
查看>>
又一个轮回(r14笔记第100天)
查看>>
通过shell脚本检测MySQL服务信息
查看>>
Greenplum集群部署小记
查看>>
通过java画文本格式的统计图
查看>>
MySQL存储过程的权限问题
查看>>
大分区表的手工并行优化
查看>>
从“悲剧”的几个运维场景谈谈运维开发的痛点
查看>>
运维工作中几点深刻的经验和教训
查看>>
本周搞几件事情,说说你的计划吧
查看>>
又一个轮回(r15笔记第100天)
查看>>
在oracle实践学习位运算 第一篇
查看>>
通过sql语句分析足彩
查看>>
生产环境sql语句调优实战第七篇
查看>>
一个oracle查询引起的bug
查看>>