在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(只能是所在局域网中的IP)对应的物理地址

1、函数:

Private Declare Function SendARP Lib "iphlpapi.dll" (ByVal DestIP As Long, ByVal SrcIP As Long, pMacAddr As Long, PhyAddrLen As Long) As Long

参数说明:

DestIP[输入]目的地IP地址。

SrcIP[输入]发送地IP地址。可选参数,调用者可以指定此参数为0

pMacAddr[输出]指向一个ULONG变量数组(array)。数组前6个字节(bytes)接收由 DestIP指定的目的地IP物理地址。

PhyAddrLen[输入,输出]输入,指定用户设置pMacAddr接收MAC地址的最大缓存大小,单位字节;输出,指定了写入pMacAddr的字节数量。

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

 

inet_addrWinsocket的函数而非”iphlpapi.dll”提供的函数,目的是将标准IP地址(”xxx.xxx.xxx.xxx”)的字符串转为电脑能识别的长整型的数据。

Private Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As Long

参数说明:

       cp:要转换的”xxx.xxx.xxx.xxx”形式的ip地址

 

2、使用到的类型:

 

3、使用到的常量:

 

4、主要代码分析:

定义目标ip地址和源ip地址,源ip地址可以为0inet_addr("127.0.0.1")inet_addr(本机某个ip)

Dim Dip As Long

Dim Sip As Long

Dip = inet_addr("xxx.xxx.xxx.xxx")

Sip = 0 'inet_addr("127.0.0.1")

定义获得的目标ip对应的物理地址,这里应采用定义:

Dim Maca(1) As Long

调用SendARP函数:

PhyaddrL = 6

r = SendARP(Dip, Sip, Maca(0), PhyaddrL)

如果探测的目标地址不存在,产生错误31,否则SendARP将返回0

Print Hex(Maca(0)), Hex(Maca(1))     

'注意显示值为 aabbccdd eeff  ,对应物理地址为 dd-cc-bb-aa-ff-ee

以下是真正的物理地址:

Print Right(Hex(Maca(0)), 2) & "-" & Mid(Hex(Maca(0)), 5, 2) & "-" & Mid(Hex(Maca(0)), 3, 2) & "-"; Left(Hex(Maca(0)), 2) & "-" & Right(Hex(Maca(1)), 2) & "-" & Left(Hex(Maca(1)), 2)

 

5、运行时截图:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值