vc程序如何获取网卡的描述信息啊?

mike_shi 2009-12-15 08:45:36
我想通过VC程序获取我的机器的网卡描述信息啊,有什么函数可以调用吗?
...全文
855 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yushiqiang1688 2009-12-16
  • 打赏
  • 举报
回复
用winpcap开发包吧,里面可以得到你所需要的网卡信息。不过上面各位大虾的方法也不错,就看你自己需要什么信息了哟!!
哈利路亚1874 2009-12-16
  • 打赏
  • 举报
回复
楼上的都贴这么多代码出来,我也没什么说的了。
建议使用WPcap很简单
waitlife 2009-12-16
  • 打赏
  • 举报
回复
这段代码会遍历所有网卡,并取得所有相关信息
waitlife 2009-12-16
  • 打赏
  • 举报
回复
下面是我的一个项目中的相关部分:请看代码,

// Declare and initialize variables

// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter.
//
// Note that this sample code only prints out the
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter.
CString strAdapterInfo, strTmp;
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;

// variables used to print DHCP time info
struct tm newtime;
char buffer[32];
errno_t error;

ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *)MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL)
{
TRACE("Error allocating memory needed to call GetAdaptersinfo\n");
return;
}
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
{
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL)
{
TRACE("Error allocating memory needed to call GetAdaptersinfo\n");
return;
}
}

if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
CString strGroupName, strSubItemName, strSubItemValue, strSubItemDescr;
CBCGPProp* pNETGroup = new CBCGPProp(_T("网络信息"));
while (pAdapter)
{
USES_CONVERSION;
strTmp.Format(_T("序号:%d\r\n"), pAdapter->ComboIndex);
strAdapterInfo += strTmp;
strTmp.Format(_T("名称:%s\r\n"), A2W(pAdapter->AdapterName));
strAdapterInfo += strTmp;
strTmp.Format(_T("描述:%s\r\n"), A2W(pAdapter->Description));
strAdapterInfo += strTmp;
strGroupName = A2W(pAdapter->Description);
CBCGPProp* pGroup = new CBCGPProp(strGroupName);
pNETGroup->AddSubItem(pGroup);

strTmp = _T("地址:");
strAdapterInfo += strTmp;
strSubItemName = _T("MAC 地址");
strSubItemValue.Empty();
for (i = 0; i < pAdapter->AddressLength; i++)
{
if (i == (pAdapter->AddressLength - 1))
strTmp.Format(_T("%.2X"), (int)pAdapter->Address[i]);
else
strTmp.Format(_T("%.2X-"), (int) pAdapter->Address[i]);
strAdapterInfo += strTmp + _T("\r\n");
strSubItemValue += strTmp;
}
strSubItemDescr = _T("网卡 MAC 地址(实际物理地址)");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));

strTmp.Format(_T("索引:%d\r\n"), pAdapter->Index);
strAdapterInfo += strTmp;
strTmp = _T("类型:");
strAdapterInfo += strTmp;
switch (pAdapter->Type)
{
case MIB_IF_TYPE_OTHER:
strTmp = _T("其它\r\n");
break;
case MIB_IF_TYPE_ETHERNET:
strTmp = _T("以太网\r\n");
break;
case MIB_IF_TYPE_TOKENRING:
strTmp = _T("令牌环\r\n");
break;
case MIB_IF_TYPE_FDDI:
strTmp = _T("FDDI\r\n");
break;
case MIB_IF_TYPE_PPP:
strTmp = _T("PPP\r\n");
break;
case MIB_IF_TYPE_LOOPBACK:
strTmp = _T("回路\r\n");
break;
case MIB_IF_TYPE_SLIP:
strTmp = _T("Slip\r\n");
break;
default:
strTmp.Format(_T("未知类型 %ld\r\n"), pAdapter->Type);
break;
}
strAdapterInfo += strTmp;

strSubItemName = _T("IP 地址");
strSubItemValue = A2W(pAdapter->IpAddressList.IpAddress.String);
strSubItemDescr = _T("IP 地址");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));
strTmp.Format(_T("IP 地址:%s\r\n"), A2W(pAdapter->IpAddressList.IpAddress.String));
strAdapterInfo += strTmp;

strSubItemName = _T("子网掩码");
strSubItemValue = A2W(pAdapter->IpAddressList.IpMask.String);
strSubItemDescr = _T("子网掩码");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));
strTmp.Format(_T("子网掩码:%s\r\n"), A2W(pAdapter->IpAddressList.IpMask.String));
strAdapterInfo += strTmp;

strSubItemName = _T("网关地址");
strSubItemValue = A2W(pAdapter->GatewayList.IpAddress.String);
strSubItemDescr = _T("网关地址");
pGroup->AddSubItem(new CBCGPProp(strSubItemName, (_variant_t)strSubItemValue, strSubItemDescr));
strTmp.Format(_T("网关地址:%s\r\n"), A2W(pAdapter->GatewayList.IpAddress.String));
strAdapterInfo += strTmp;
strTmp = _T("***\r\n");
strAdapterInfo += strTmp;

if (pAdapter->DhcpEnabled)
{
CString strStart, strEnd;
strTmp = _T("DHCP:是\r\n");
strAdapterInfo += strTmp;
strTmp.Format(_T(" DHCP 服务器:%s\r\n"), A2W(pAdapter->DhcpServer.IpAddress.String));
strAdapterInfo += strTmp;

strTmp = _T(" 租约时间:");
strAdapterInfo += strTmp;
// Display local time
error = _localtime32_s(&newtime, (const __time32_t *)&pAdapter->LeaseObtained);
if (error)
TRACE("Invalid Argument to _localtime32_s\n");
else
{
// Convert to an ASCII representation
strftime(buffer, _countof(buffer), "%Y-%m-%d %H:%M:%S", &newtime);
//error = asctime_s(buffer, 32, &newtime);
//if (error)
// TRACE("Invalid Argument to asctime_s\n");
//else
{
// asctime_s returns the string terminated by \n\0
strTmp.Format(_T("%s\r\n"), A2W(buffer));
strStart = A2W(buffer);
strAdapterInfo += strTmp;
}
}
strTmp = _T(" 到期时间:");
strAdapterInfo += strTmp;
if(pAdapter->LeaseExpires == 0)
{
//time_t spantime = 912395715;
//time_t ts = ::mktime(&newtime);
//time_t lasttime = spantime + ts;
//struct tm lasttm;
//error = localtime_s(&lasttm, &lasttime);
//if (error)
// TRACE("Invalid Argument to _localtime32_s\n");
//else
{
// strftime(buffer, _countof(buffer), "%Y-%m-%d %H:%M:%S", &lasttm);
// strTmp.Format(_T("%s(无限期,静态分配)\r\n"), A2W(buffer));
// strEnd = A2W(buffer);
// strEnd += _T("(无限期,静态分配)");
strTmp = _T("(无限期,静态分配)\r\n");
strEnd = _T("(无限期,静态分配)");
// strAdapterInfo += strTmp;
}
}
else
{
error = _localtime32_s(&newtime, (const __time32_t *)&pAdapter->LeaseExpires);
if (error)
TRACE("Invalid Argument to _localtime32_s\n");
else
{
// Convert to an ASCII representation
strftime(buffer, _countof(buffer), "%Y-%m-%d %H:%M:%S", &newtime);
//error = asctime_s(buffer, 32, &newtime);
//if (error)
// TRACE("Invalid Argument to asctime_s\n");
//else
{
// asctime_s returns the string terminated by \n\0
strTmp.Format(_T("%s\r\n"), A2W(buffer));
strEnd = A2W(buffer);
strAdapterInfo += strTmp;
}
}
}
CBCGPProp* pDHCP = new CBCGPProp(_T("DHCP"), 0, TRUE);
CBCGPProp* pDHCPDetailProp = new CBCGPProp(_T("DHCP 服务器"), (_variant_t)A2W(pAdapter->DhcpServer.IpAddress.String), _T("DHCP 服务器"));
pDHCP->AddSubItem(pDHCPDetailProp);
pDHCPDetailProp = new CBCGPProp(_T("租约时间"), (_variant_t)strStart, _T("租约时间"));
pDHCP->AddSubItem(pDHCPDetailProp);
pDHCPDetailProp = new CBCGPProp(_T("到期时间"), (_variant_t)strEnd, _T("到期时间"));
pDHCP->AddSubItem(pDHCPDetailProp);
pGroup->AddSubItem(pDHCP);
}
else
{
strTmp = _T("DHCP:否\r\n");
strAdapterInfo += strTmp;
CBCGPProp* pDHCP = new CBCGPProp(_T("DHCP"), 0, TRUE);
pDHCP->AddSubItem(new CBCGPProp(_T("DHCP"), (_variant_t)false, _T("DHCP")));
pGroup->AddSubItem(pDHCP);
}
if (pAdapter->HaveWins)
{
strTmp = _T("WINS:是\r\n");
strAdapterInfo += strTmp;
strTmp.Format(_T(" 主 WINS 服务器:%s\r\n"), A2W(pAdapter->PrimaryWinsServer.IpAddress.String));
strAdapterInfo += strTmp;
strTmp.Format(_T(" 辅 WINS 服务器:%s\r\n"), A2W(pAdapter->SecondaryWinsServer.IpAddress.String));
strAdapterInfo += strTmp;

CBCGPProp* pWINS = new CBCGPProp(_T("WINS"), 0, TRUE);
CBCGPProp* pWINSDetailProp = new CBCGPProp(_T("主服务器"), (_variant_t)A2W(pAdapter->PrimaryWinsServer.IpAddress.String), _T("主 WINS 服务器"));
pWINS->AddSubItem(pWINSDetailProp);
pWINSDetailProp = new CBCGPProp(_T("辅服务器"), (_variant_t)A2W(pAdapter->SecondaryWinsServer.IpAddress.String), _T("辅 WINS 服务器"));
pWINS->AddSubItem(pWINSDetailProp);
pGroup->AddSubItem(pWINS);
}
else
{
strTmp = _T("WINS:否\r\n");
strAdapterInfo += strTmp;

CBCGPProp* pWINS = new CBCGPProp(_T("WINS"), 0, TRUE);
pWINS->AddSubItem(new CBCGPProp(_T("WINS"), (_variant_t)false, _T("WINS")));
pGroup->AddSubItem(pWINS);
}
pAdapter = pAdapter->Next;
strAdapterInfo += _T("\r\n");
}
m_wndOtherInfoPropList.AddProperty(pNETGroup);
}
else
{
TRACE("GetAdaptersInfo failed with error: %d\n", dwRetVal);
return;
}
if (pAdapterInfo)
FREE(pAdapterInfo);
//StringCchCopy(szAdapter, BUFSIZE, strAdapterInfo);
return;
mike_shi 2009-12-16
  • 打赏
  • 举报
回复
我想要实现的是通过VC程序得到我机器有多少块网卡信息,以及每一块的描述信息,就象下面这样的
1. \Device\NPF_GenericDialupAdapter (Generic dialup adapter)
2. \Device\NPF_{D8E95ADD-FC35-4F8D-8524-1E95A9B78D5D} (Intel(R) PRO/Wireless 220
0BG Network Connection (Microsoft's Packet Scheduler) )
3. \Device\NPF_{BB9DA0B4-63F4-4E8A-9C3B-01A2C830FF77} (Broadcom 440x 10/100 Inte
grated Controller (Microsoft's Packet Scheduler) )
各位高手如何实现啊

zhaokeke0706,你有现成的程序吗,发一个给我xuhaixia602@163.com
飞天赤狐 2009-12-16
  • 打赏
  • 举报
回复
楼上很详细
yulinwood 2009-12-16
  • 打赏
  • 举报
回复
ool CLifeApp::dywkid()
{

char tempChar;
ULONG uListSize=1;
PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息
nAdapterIndex = 0;

DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize); // 关键函数

if (dwRet == ERROR_BUFFER_OVERFLOW)
{
PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);
dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);
if (dwRet == ERROR_SUCCESS)
{
pAdapter = pAdapterListBuffer;
while (pAdapter) // 枚举网卡
{
u_char g_ucLocalMac[6];
memcpy(g_ucLocalMac, pAdapter->Address,6);
u_char *p = g_ucLocalMac;
wkidku[nAdapterIndex].Format("%02X%02X%02X", p[3], p[4], p[5]);
AdapterList[nAdapterIndex].dwIndex = pAdapter->Index; // 编号
wkid=wkidku[nAdapterIndex];
pAdapter = pAdapter->Next;
nAdapterIndex ++;
}
delete pAdapterListBuffer;
}
else return false;
}
return true;
}
天外飞车 2009-12-15
  • 打赏
  • 举报
回复
前一段刚看到的,有现成的c++程序。
你要吗?要的话,可以发给你
MoXiaoRab 2009-12-15
  • 打赏
  • 举报
回复
你想获得什么信息啊
shenyi0106 2009-12-15
  • 打赏
  • 举报
回复
iphlpapi.h

//////////////////////////////////////////////////////////////////////////////
// //
// Gets the MIB-II ifEntry //
// The dwIndex field of the MIB_IFROW should be set to the index of the //
// interface being queried //
// //
//////////////////////////////////////////////////////////////////////////////

DWORD
WINAPI
GetIfEntry(
IN OUT PMIB_IFROW pIfRow
);
shenyi0106 2009-12-15
  • 打赏
  • 举报
回复
查iphlp.h中的函数,对你有帮助

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧