在vb中使用Iphlpapi.dll获取网络信息 第二章 第二十一节 增加和删除一个IP地址

※==================================================================
※本连载文章说明:
※1、连载首发于《软件报》(http://www.sweek.com)2006年21期(2006年5月22日);
※2、此次网上连载采用的是原稿件结构,内容与《软件报》发表略有不同;
※3、谢绝除《软件报》及其相关刊物之外的传统媒体部分或全部转载;
※4、谢绝任何收费媒体、网络转载;
※5、原作者:uruseibest ,blog:http://blog.csdn.net/uruseibest
※6、如有其它疑问,请联系作者;
※7、如有转载,必须连同本说明一并发表,否则将追究转载者责任。
※======================================================================

第二十一节 增加和删除一个IP地址

1、函数:      

①Private Declare Function AddIPAddress Lib "iphlpapi.dll" ( ByVal Address As Long, ByVal IpMask As Long, ByVal Ifindex As Long, NTEContext As Long, NTEInstance As Long) As Long

参数说明:

Address:[输入]要增加的IP地址

IpMask:[输入]IP地址的子网掩码

IfIndex:[输入]增加IP地址的适配器,实际值为MIB_IPADDRTABLE.table(适配器编号).dwIndex

NTEContext:[输出]成功则指向一个与这个IP地址关联的网络表接口(Net Table Entry:NTE)ULONG变量。调用者可以在稍后使用这个关系到调用DeleteIPAddress。

NTEInstance:[输出]成功则指向这个IP地址的网络表接口(Net Table Entry:NTE)实例。

返回值:成功,返回0;失败,返回错误代码。

备注:①增加的IP是临时的,当系统重新启动或者发生其它的PNP事件的时候这个IP就不存在了,比如将网卡禁用,然后启用,就会发现之前调用函数AddIPAddress增加的的IP地址不存在了。②有时候,调用这个函数,可能造成网络出错、系统Arp映射错误等,但可以禁用/启用网卡恢复成正常状态。。

 

②Private Declare Function DeleteIPAddress Lib "iphlpapi.dll" (ByVal NTEContext As Long) As Long

参数说明:

NTEContext:[输入] IP地址关联的网络表接口(Net Table Entry:NTE),这个关联是之前用AddIPAddress所创建的,在调用函数GetAdaptersInfo后,从获得的IP_ADAPTER_INFO. IpAddressList. Context 中也可获得这个参数的值

返回值:成功,返回0;失败,返回错误代码。

备注:实际上函数DeleteIPAddress只能删除由函数AddIPAddress创建的IP地址。

 

③Private Declare Function GetIpAddrTable Lib "iphlpapi.dll" (pIpAddrTable As MIB_IPADDRTABLE, pdwSize As Long, bOrder As Long) As Long

参看本章第九节 1、

 

④Private Declare Function GetAdaptersInfo Lib "iphlpapi.dll" (IpAdapterInfo As Any, pOutBufLen As Long) As Long

参看本章第一节 1、

 

2、使用到的类型:

①MIB_IPADDRTABLE 包含IP地址入口表
参看本章第九节 2、①

②MIB_IPADDRROW 指定特殊IP地址的信息

参看本章第九节 2、②

③IP_ADAPTER_INFO类型:包含本机网络适配器信息。

参看本章第一节 1、①

④IP_ADDR_STRING描述IP 地址链表的节点。

参看本章第一节 1、②

 

3、使用到的常量:

Const MAX_ADAPTER_NAME_LENGTH = 260

Const MAX_ADAPTER_ADDRESS_LENGTH = 8

Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132

 

4、主要代码分析:

①使用函数GetIpAddrTable获取某个要增加IP的适配器的dwIndex:

Dim IpAddrTable As MIB_IPADDRTABLE

dwsize = Len(IpAddrTable)

r = GetIpAddrTable(IpAddrTable, dwsize, order)

②传入IP地址和Mask地址的长整数形式,使用函数AddIPAddress增加地址,返回的NteC 将用于函数DeleteIPAddress,函数的返回值为0表示成功 :

Addr = inet_addr("192.168.1.5")

IpM = inet_addr("255.255.255.0")

r = AddIPAddress(Addr, IpM, IpAddrTable.table(1).dwIndex, NteC, NteI)

③调用函数DeleteIPAddress,返回值为0表示成功:

r = DeleteIPAddress(NteC)

 

备注:增加删除IP地址最好的方法是将Ntec的值记录下来,如果实在没有记录,那么可以调用函数GetAdaptersInfo获得网络适配器信息,然后获得要删除的IP地址的网络接口表:IP_ADDR_STRING.Context,这个值实际就是Ntec的值。

 

5、运行时截图:

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/UruseiBest/archive/2006/12/20/1450399.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值