深度剖析WinPcap之(七)——获得与释放网络适配器设备列表(1)
2009-09-11 00:00:00 来源:WEB开发网函数pcap_findalldevs首先调用packet.dll中提供的PacketGetAdapterNames 函数,通过给第一个参数pStr传递NULL值,使第二个参数 BufferSize返回存储适配器列表所需的字节数。按该字节数分配空间AdaptersName以存储适配器列表。把第一个参数设为AdaptersName所指的内存空间,第二次调用PacketGetAdapterNames 函数,以获得适配器列表。
对所获的适配器列表进行解析,获得每个适配器的名称与描述,并调用pcap_add_if_win32函数把每个适配器的信息添加到适配器设备列表devlist中。为防止通过“标准”方式没有找到的设备被遗漏,调用依赖平台的函数 pcap_platform_finddevs查找余下的设备信息,并添加到适配器设备列表devlist中。
添加信息结束后,把devlist存放到alldevsp参数所指内存中,释放存储适配器列表的AdaptersName所指的内存空间,函数返回。
1.3.1.1 pcap_add_if_win32函数
函数pcap_add_if_win32()为一个适配器在devlist链表中添加一个节点。
函数原型如下:
static int pcap_add_if_win32(pcap_if_t **devlist,
char *name, const char *desc,char *errbuf)
参数devlist返回存储所有适配器详细信息的链表。参数name为适配器的名称,参数desc为该适配器的描述。参数errbuf返回错误信息。
函数成功返回0值,否则返回非0值。
函数的主要代码如下:
static int pcap_add_if_win32(pcap_if_t **devlist, char *name, const char *desc,
char *errbuf)
{
pcap_if_t *curdev;
npf_if_addr if_addrs[MAX_NETWORK_ADDRESSES];
LONG if_addr_size;
int res = 0;
if_addr_size = MAX_NETWORK_ADDRESSES;
/*给devlist添加该接口节点,不带网络地址信息,curdev 返回该接口的节点*/
if (add_or_find_if(&curdev, devlist, name, 0, desc, errbuf) == -1) {
//添加失败,函数返回
return (-1);
}
//调用packet.dll提供的函数,返回一个适配器的所有网络地址信息
if (!PacketGetNetInfoEx((void *)name, if_addrs, &if_addr_size)) {
//失败,此处并不返回失败,而是返回一个空的地址链表。
//对于NdisWan接口,这种情况可能发生,同时希望提供这些接口,
//即使不能提供接口的网络地址。
return (0);
}
/*现在向节点中添加网络地址信息链表*/
//"curdev" 是表示该接口的节点,对该节点添加它的网络地址链表
while (if_addr_size-- > 0) {
if(curdev == NULL)
break;
//把接口一个网络地址的各种地址信息添加到curdev节点中
res = add_addr_to_list(curdev,
(struct sockaddr *)&if_addrs[if_addr_size].IPAddress,
(struct sockaddr *)&if_addrs[if_addr_size].SubnetMask,
(struct sockaddr *)&if_addrs[if_addr_size].Broadcast,
NULL,
errbuf);
if (res == -1) {
//失败
break;
}
}
return (res);
}
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接