提取网络接口信息

提取网络接口信息 其中最主要的两个函数是GetNumberOfInterfaces和GetInterfaceInfo,前者指出网络接口的个数,后者提取网络接口的信息。对于第一个函数要说明的一点是它好象并没有返回正确的值,因为据MSDN描述:一个网络接口是网卡的逻辑抽象,它们是一对一的关系。而实际情况是我的机器上只有一张网卡,这个函数却返回了2。实际上,因为每个系统都附加有一个调试用的网络接口,这个接口的IP地址是127.0.0.1子网掩码是255.0.0.0。这个结果可以从程序的输出看出来。由GetInterfaceInfo返回的IP_INTERFACE_INFO结构中也有一个NumAdapters整型的数据域记录了正确的网卡。然后对于GetInterfaceInfo要注意的是它也必须被调用两次,第一次获取缓冲大小,第二次才是取值。然后再次让我感到其怪的是GetInterfaceInfo返回的IP_INTERFACE_INFO不象上面的结构是用链表,而是用的动态数组的方法(到现在什么线性结构都用上了),所以遍历其中每一个元素的代码变成: for(int i=0;iNumAdapters;i++) { cout<<"Adapter index:" < IP_INTERFACE_INFO结构的解释如下: typedef struct _IP_INTERFACE_INFO { LONG NumAdapters; // 动态数组中网络接口元素的个数,通过它来遍历数 //组 IP_ADAPTER_INDEX_MAP Adapter[1]; // 网络接口数据数组 } IP_INTERFACE_INFO,*PIP_INTERFACE_INFO; 其中的IP_ADAPTER_INDEX_MAP结构如下: typedef struct _IP_ADAPTER_INDEX_MAP { ULONG Index; // 网卡索引 WCHAR Name[MAX_ADAPTER_NAME]; // 网卡名 } IP_ADAPTER_INDEX_MAP, * PIP_ADAPTER_INDEX_MAP; 提取IP信息 这部分显然和提取网络接口信息部分是相同的。 设置本地网络 设置的过程与提取过程其实是换汤不换药。我不想在这里演示每一个函数的用法,所以只使用了一个(我 认为)最常用的函数AddIPAddress。这个函数能够设置本地网络的IP。但不幸的是,这个IP是临时的, 当系统重新启动或者发生其它的PNP事件的时候这个IP就不存在了。那么有人会问这有什么用呢?实际 上,每个网络接口卡都可以绑定多个IP,所以在网络环境恶劣的情况下(如校园网)同时预备多个IP以防 断线是有必要的。必须指出的是这种临时的IP在网络通讯时可能导致的问题现在还没有测试过,诸如 CODEGURU,CSDN,MSDN,或者TECHREPUBLIC对这套API也没有详细的解释(虽然它很有用)。 其它的API函数 这些函数能够让你察看或者设置网络数据报文方面的信息。比方 GetIpStatistics、GetIcmpStatistics函数能够让你查看当前IP数据报和ICMP数据报的流量,以及 废弃的数据报数量等等。使用这些函数你可以构建自己的网络监控程序检察网络中的故障。你也可以使用 SetIpStatistics 函数来设置相应的IP协议栈属性,缩短或者延长IP数据报的缺省TTL值。然后你也可 使用 、CreateIpForwardEntry 、DeleteIpForwardEntry、SetIpForwardEntry来 别获取IP路由表的信息,创建路由表项,删除路由表项和修改路由表项。也可以用GetBestRoute、 获得到达指定IP的最好的路由点和网络接口。 事实上,通过这些函数我们可以得到许多MIB变量(《使用TCP/IP协议实现网际互联》第二卷),通过这 些MIB变量,我们可以非常快速的制作一个网络管理软件。 未涉及的部分 我们没有涉及IP Helper API中SendARP函数的使用。实际上,这个函数是我使用这套API的主要原因,它 够简单的发送ARP数据包并返回目标机器的MAC地址。我使用这个函数制作了另一个简单的IP查看程序 它能够查看局域网上哪些IP正在使用,并能够显示它们的MAC地址。如果把这些信息记录在文件中,我 可以统计出一天中哪些家伙的上网时间最长以及其上网的习性并能够知道哪些人更换了他们的网卡,也 以分析出这个网络的使用情况(我在学校的高峰时段统计出一个网段的254个IP中竟有236个正在使用 可见增加网段的必要了)。我将在后面的文章中说明这个程序的制作。我们也没有涉及这套API提供的当 络设置改变时向应用程序发出消息的异步通知功能。因为它们非常简单,与WINSOCK中 的使用方法是一样的,就不再说明了。 后话 讨论如何使用API函数也许会被一批"纯粹"的程序员所鄙视。但每次看到有人在论坛上急切的询问如何取 得本机网关,IP地址,路由之类的信息的时候,我就觉得非常有必要介绍这一套API函数,它能够(至少 在我看来)满足我们的大部分要求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值