IP Helper API 简介

IP Helper 是一套用于管理本地网络设置的API。使用这一套API可以方便的改变计算机的网络设置或者提取有关的信息。而且它还提供了一种消息机制,能够在本地计算 机的网络设置发生改变时通知应用程序。实际上,它不仅仅能够提取本机的网络设置信息,还能够获得网络上其它计算机的IP使用情况和MAC地址。

从最简单的开始
最简单的是查看计算机上的网络设置是什么而不修改。

提取网卡信息

hInst=LoadLibrary("iphlpapi.dll");
if(!hInst)
cout<<"iphlpapi.dll not supported in this platform!\n";


这三行代码的作用是加载iphlpapi库文件,

下面的几行代码显示了调用DLL中函数的过程:

pGAInfo=(PGAINFO)GetProcAddress(hInst,"GetAdaptersInfo");
ULONG ulSize=0;
pGAInfo(pInfo,&ulSize);
pInfo=(PIP_ADAPTER_INFO)new(char[ulSize]);
pGAInfo(pInfo,&ulSize);

第 一行代码是获得函数GetAdaptersInfo的入口地址,以便在后面通过指针调用函数。这个函数的功能是提取网卡的信息,并接收两个参数,第一个参 数是用来保存网卡信息的内存缓冲的首地址,而第二个参数是这个缓冲的大小。由于事先不知道本地机器上有多少张网卡,所以也就没法知道应该分配多大的缓存。 好在GetAdaptersInfo函数在缓冲的大小不够时会在第二个参数也就是ulSize中填入应该分配的缓冲的大小。这样,就可以调用两次 GetAdaptersInfo,第一次是获取缓冲区的大小,然后分配这个缓冲以后再次调用它以获得实际的网卡信息。

GetAdaptersInfo通过pInfo返回的信息是以链表的方式组织的,下面就是访问链表的代码:


while(pInfo)
{
//访问网卡数据
//将当前指针移向下一个结点
pInfo=pInfo->Next; 
}

为了说明问题,省略了其中的代码。

下面看看GetAdaptersInfo都返回了些什么样的信息,下面是对pInfo所指向的数据结构的解释:

typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;//链表指针域,通过这个来遍历静态键表

DWORD ComboIndex;//保留未用

char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];//网卡名

char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];//对网卡的描述

UINT AddressLength;//物理地址的长度,通过这个显示下面数组中的物理地址

BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//物理地址,每个字节存放一个十六进制的数值,配合上一个数据域在printf中用x格式把每个字节输出。

DWORD Index;//网卡索引号

UINT Type;//网卡类型

UINT DhcpEnabled;//是否启用了DHCP动态IP分配

PIP_ADDR_STRING CurrentIpAddress;//当前使用的IP地址

IP_ADDR_STRING IpAddressList;//绑定到此网卡的IP地址链表,重要项目

IP_ADDR_STRING GatewayList;//网关地址链表,重要项目

IP_ADDR_STRING DhcpServer;//DHCP服务器地址,只有在DhcpEnabled==TRUE的情况下才有效

BOOL HaveWins;//是否启用了WINS

IP_ADDR_STRING PrimaryWinsServer;//主WINS地址

IP_ADDR_STRING SecondaryWinsServer;//辅WINS地址

time_t LeaseObtained;//当前DHCP租借获取的时间

time_t LeaseExpires;//当前DHCP租借失效时间。这两个数据结构只有在启用了DHCP时才有用。

} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

这个数据结构中的几个IP地址字符串IpAddressList、GatewayList等等都是以链表的方式组织的。实际上所有数据都可以在控制面板|网络|属性|TCP/IP的属性页的高级选项里看见


提取网络接口信息


其 中最主要的两个函数是GetNumberOfInterfaces和GetInterfaceInfo,前者指出网络接口的个数,后者提取网络接口的信 息。对于第一个函数要说明的一点,据MSDN描述:一个网络接口是网卡的逻辑抽象,它们是一对一的关系。实际上,因为每个系统都附加有一个调试用的网络接 口,这个接口的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:"<<Adapter[i].Index<<Adapter[i].Name<<endl;
}


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信息
这部分提取网络接口信息部分是相同的。

设置本地网络
设置的过程与提取过程类似。

其它的API函数
这 些函数能够察看或者设置网络数据报文方面的信息。比方GetIpStatistics、GetIcmpStatistics函数能够查看当前IP数据报和 ICMP数据报的流量,以及废弃的数据报数量等等。使用这些函数可以构建网络监控程序检查网络中的故障。也可以使用SetIpStatistics 函数来设置相应的IP协议栈属性,缩短或者延长IP数据报的缺省TTL值。也可以使用GetIpForwardTable、 CreateIpForwardEntry 、DeleteIpForwardEntry、SetIpForwardEntry来分别获取IP路由表的信息,创建路由表项,删除路由表项和修改路由表 项。也可以用GetBestRoute、 GetBestInterface获得到达指定IP的最好的路由点和网络接口。

事实上,通过这些函数可以得到许多MIB变量(《使用TCP/IP协议实现网际互联》第二卷),通过这些MIB变量,可以非常快速的制作一个网络管理软件。

IP Helper API中SendARP函数。它能够简单的发送ARP数据包并返回目标机器的MAC地址。

这套API提供的当网络设置改变时向应用程序发出消息的异步通知功能。因为它们非常简单,与WINSOCK中WSAAsyncSelect的使用方法是一样的,就不再说明了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介: IPHelper是一款帮助您快速设置IP地址、网关、DNS及IE代理服务器等相关设置的绿色免费软件, 特别适合移动办公用户和需要经常在不同网段间切换的用户使用。作者最早开发此软件时是为了满足 自身的更改IP的需要,随后在网络上众多用户给予了肯定、支持和帮助,4年多来IPHelper经过的不断 改进,操作更加便利,功能不断完善,希望它能给更多的用户带来便利! 更新日志: IPHelper5.2 - 增加了修改计算机名称及执行自定义命令等功能。修正了部分bug,增进界面友好性。(2008/12) IPHelper4.6 - 增加了“生成快捷方式”功能,大大提高了部分常用配置的切换速度。软件可以 最小化到任务栏,并快速切换配置。修正了部分bug,增进界面友好性。(2007/01) IPHelper4.2 - 改用xml配置文件存放历史配置;增加多IP多DNS设置;增加IE代理服务器设置; 增强了操作性。(2006/07) IPHelper3.5 - 增加网络连通情况测试。调整了界面结构,增加界面友好性。(2005/03) IPHelper3.3 - 增加了自动备份功能;增加了小图标显示功能(右键菜单内选择);修正了多 DNS会自动退出的Bug。(2004/11) IPHelper3.1 - 加强了界面友好度,可以更改配置名称。添加了DNS修改功能。(2004/03) IPHelper2.6 - 加强了对多网卡的支持,对性能进行了优化,添加了新版本提示功能。(2003/08) IPHelper2.1 - 第一个发布版本,小巧实用的特性得到了网友们的肯定。(2002/11) 联系方式: Web: http://www.4w5w.com/soft/ E-Mail: [email protected]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值