界面控件

控件类型 控件名
ListBox List1
TextBox Text1
TextBox Text2
CommandButton Command1
CommandButton Command2

窗体代码

'===========================================
'Desc:获取本机IP地址和子网掩码
'Author:yoyoba(stuyou@126.com)
'Date:2007-11-28
'Modify:2007-12-6
'===========================================
Option Explicit
Public WithEvents vpcap As vbPacket '声明一个使用vbpcap事件的vpcap对象变量
Dim AdapterString As String * 1000 'GetAdapterNames函数返回的网卡名,存放于该变量
Dim selAdapterName As String '在List列表中被选中网卡的名字
Private Sub Command2_Click()
    vpcap.CloseAdapter
    End
End Sub
Private Sub Form_Load()
    Set vpcap = New vbPacket '为对象变量vpcap赋值
    Dim NumAdapter As Long 'GetAdapterNames函数返回的网卡数,存放于该变量
    Dim AdapterList
    Dim i As Integer
   
    NumAdapter = vpcap.GetAdapterNames(AdapterString) '调用GetAdapterNames函数。获得本机网卡名字
    If NumAdapter = 0 Then
        MsgBox "Founded NONE adapter!,please check it!"
    End If
   
    AdapterList = Split(AdapterString, vbNullChar) '把获得得网卡名置于List控件中
    For i = 0 To NumAdapter
        List1.AddItem AdapterList(i)
    Next i
   
End Sub
Private Sub Command1_Click()

    Dim NetIP As Long '返回该网卡的IP
    Dim NetMask As Long '返回该网卡的掩码
   
    selAdapterName = List1.Text 'SetAdapterName为在List中选中的网卡
   
    If selAdapterName = "" Then
        MsgBox "You have not selected a adapter!"
    Else
        vpcap.GetNetInfo selAdapterName, NetIP, NetMask '调用GetNetInfo函数,获取IP和submask
        Text1.Text = GetIpFromLong(NetIP) '调用在getip_4byte模块中定义的GetIpFromLong函数,_
                                                        '把Long型的NetIp转换成4字节表示的IP地址表示法
        Text2.Text = GetIpFromLong(NetMask)
    End If
   
   
End Sub

标准模块(mdl3.bas)代码

Option Explicit
Public Declare Sub memcpy Lib "kernel32" Alias _
               "RtlMoveMemory" (ByRef Destination As Any, _
                ByRef Source As Any, ByVal Length As Long) '调用WindowsAPI,使用memcpy库中的函数,把一个4字节的long数据转换成4个byte数据, '_该声明必须放在模块或类中,不能放在窗体中
'=====================================================
'Name:GetIpFromLong
'Desc:把一个long型数据表示的IP地址转换成点分10进制表示
'Parameters:[in]lngIPAddress:以long型数据表示的IP地址
'Return: 点分10进制表示的IP地址,String类型
'Author:yoyoba(stuyou@126.com)
'Date:2007-11-28
'Modify:2007-11-28
'=====================================================
Public Function GetIpFromLong(lngIPAddress As Long) As String '声明函数,用来把4字节的long数据转换成4个byte数据
    Dim arrIpParts(3) As Byte
    memcpy arrIpParts(0), lngIPAddress, 4 '调用memcpy函数
    GetIpFromLong = CStr(arrIpParts(3)) & "." & _
                    CStr(arrIpParts(2)) & "." & _
                    CStr(arrIpParts(1)) & "." & _
                    CStr(arrIpParts(0))
End Function