使用libnet_open_link_interface获取网卡信息的问题i

alaxis 2009-01-21 03:46:27
struct libnet_link_int *l;
char ebuf[PCAP_ERRBUF_SIZE];
l = libnet_open_link_interface((char *)szNicName, ebuf);
if (!l)
{
return;
}
// get the interface info
unsigned long ulIP = htonl(l->g_Info->LocalIp);
unsigned long ulMask = htonl(l->g_Info->NetMask);
unsigned long ulGateway = htonl(l->g_Info->DefaultGateway);

为啥获取到的DefaultGateway永远是0?请各位高手指教,谢谢!
...全文
291 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanmeining 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 alaxis 的帖子:]
struct libnet_link_int *l;
char ebuf[PCAP_ERRBUF_SIZE];
l = libnet_open_link_interface((char *)szNicName, ebuf);
if (!l)
{
return;
}
// get the interface info
unsigned long ulIP = htonl(l->g_Info->LocalIp);
unsigned long ulMask = htonl(l->g_Info->NetMask);
unsigned long ulGateway = htonl(l->g_Info->DefaultGateway);

为啥获取到的DefaultGateway永远是0?请各位高手指教,谢谢!
[/Quote]
难道libnet_open_link_interface()失败了?
alaxis 2009-01-22
  • 打赏
  • 举报
回复
代码里写错一句话。。。。。
// adapter IP address list
PIP_ADDR_STRING pIpAddressList = &pAdapterInfo->IpAddressList;

// adapter default gateway list
PIP_ADDR_STRING pGatewayList = &pAdapterInfo->GatewayList;
alaxis 2009-01-22
  • 打赏
  • 举报
回复
今天用了GetAdaptersInfo试了一下,效果不错,共享代码片断。

typedef struct net_interface
{
CString strIfName;
CString strIfDesc;
map<CString, CString> strIfIPAddrList; // <ip, mask>
CString strIfMacAddr;
list<CString> IfDefaultGWList;
}NetInterface, *pNetInterface;

map<CString, NetInterface> m_IfList;

IP_ADAPTER_INFO theAdapterInfo;
ULONG ulOutBufLen = 0;
if (ERROR_BUFFER_OVERFLOW == GetAdaptersInfo(&theAdapterInfo, &ulOutBufLen))
{
if (ERROR_SUCCESS != GetAdaptersInfo(&theAdapterInfo, &ulOutBufLen))
{
return FALSE;
}
else
{
PIP_ADAPTER_INFO pAdapterInfo = &theAdapterInfo;
while (pAdapterInfo != NULL)
{
NetInterface theIf;
// adapter name
theIf.strIfName = pAdapterInfo->AdapterName;
// adapter description
theIf.strIfDesc = pAdapterInfo->Description;
// adapter IP address list
PIP_ADDR_STRING pIpAddressList = pAdapterInfo->IpAddressList;
while (pIpAddressList != NULL)
{
theIf.strIfIPAddrList.insert(map<CString, CString>::value_type(pGatewayList->IpAddress.String, pGatewayList->IpMask.String));
pIpAddressList = pIpAddressList->Next;
}
// adapter MAC address
char szMac[20];
MacToString(pAdapterInfo->Address, szMac);
theIf.strIfMacAddr = szMac;
// adapter default gateway list
PIP_ADDR_STRING pGatewayList = pAdapterInfo->GatewayList;
while (pGatewayList != NULL)
{
theIf.IfDefaultGWList.push_back(pGatewayList->IpAddress.String);
pGatewayList = pGatewayList->Next;
}
// insert the adapter into the m_IfList
m_IfList.insert(map<CString, NetInterface>::value_type(theIf.strIfName, theIf));

pAdapterInfo = pAdapterInfo->Next;
}
}
}
alaxis 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tanmeining 的回复:]
难道libnet_open_link_interface()失败了?
[/Quote]

当然不是,呵呵,LocalIp和NetMask都获取到了,就是DefaultGateway是0,单步调试的时候看得很清楚。毕竟是开源的东西啊,可能是作者觉得没有必要设置吧,也可能是bug,不知道最新版本里面有没有修复。。。
alaxis 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 oyljerry 的回复:]
可以用IpHelper API
GetAdapterInfo()获得网卡信息
[/Quote]

恩,前面也想到了,一会儿去试试,嘿嘿
oyljerry 2009-01-21
  • 打赏
  • 举报
回复
可以用IpHelper API
GetAdapterInfo()获得网卡信息
xiaoyisnail 2009-01-21
  • 打赏
  • 举报
回复
帮顶~
星羽 2009-01-21
  • 打赏
  • 举报
回复
没用过,你看看这个由帮助不 http://blog.csdn.net/3moods/archive/2004/07/13/40870.aspx
ckt 2009-01-21
  • 打赏
  • 举报
回复
up 2
nullah 2009-01-21
  • 打赏
  • 举报
回复
up
waizqfor 2009-01-21
  • 打赏
  • 举报
回复
帮顶一下

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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