windows的iphlpapi.h头文件

windows的平台sdk中有一个很重要的iphlpapi.h头文件,它提供了一些非常实用的获取网络信息(网卡、tcp/ip等)的函数:

里面主要的函数主要有:

GetNumberOfInterfaces()获取当前的网络接口数目:注意不是网卡数目,这个相当于你的查看网络连接里面的连接数目+1(本地回路)

GetIfTable()得到所有网络接口的信息(包括网卡信息、收到发出数据量、连接类型、连接状态等)

GetIpAddrTable() GetIpNetTable():获取ip到网络接口、IP到网卡地址的映射

GetTcpTable()  GetUdpTable()获取当前的TCP UDP连接状况

GetIpStatistics() GetIcmpStatistics() GetTcpStatistics()GetUdpStatistics()  得到当前各协议的主要参数和信息,此外还有一些相应的set函数

还有关于路由的一些函数

GetAdapterIndex() GetAdaptersInfo() GetAdaptersAddresses():得到关于网卡的信息

AddIPAddress():设置IP

SendARP():发送一个arp请求,获得一个物理地址所对应的IP地址

这里的函数都比较实用,但是一些函数的用法稍微有些奇怪。

如里面很多的函数,以GetIfTable为例,它的定义是

DWORD GetIfTable(   __out         PMIB_IFTABLE pIfTable,   __in_out      PULONG pdwSize,   __in          BOOL bOrder );

第一个参数为一个接收存储数据的缓存,第二个参数为这片数据的大小

我们直接调用将不知道该将第二个参数设为多少,所以应该先调用一次,将第二个参数设为MIB_IFTABLE结构体的size,这样pdwSize中将返回所需的缓存大小

MIB_IFTABLE* it; 
ULONG pdwSize=sizeof(MIB_IFTABLE); 
    it=(MIB_IFTABLE*)(malloc(sizeof(MIB_IFTABLE))); 
    GetIfTable(it,&pdwSize,false);free(it);

然后再为数据开辟这么大的缓存再调用一次才行

it=(MIB_IFTABLE*)(malloc(pIfRow)); 
    GetIfTable(it,&pIfRow,false); 
    free(it);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值