Option Explicit Private Const WS_VERSION_REQD As Long = &H101 Private Const INADDR_NONE As Long = &HFFFFFFFF Private Const MAX_WSADescription As Long = 256 Private Const MAX_WSASYSStatus As Long = 128 Private Const PING_TIMEOUT As Long = 500Private Type ICMP_OPTIONS Ttl As Byte Tos As Byte Flags As Byte OptionsSize As Byte OptionsData As Long End TypePrivate Type ICMP_ECHO_REPLY Address As Long status As Long RoundTripTime As Long DataSize As Long DataPointer As Long Data As String * 250 End Type Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To MAX_WSADescription) As Byte szSystemStatus(0 To MAX_WSASYSStatus) As Byte wMaxSockets As Long wMaxUDPDG As Long dwVendorInfo As Long End TypePrivate Declare Function IcmpCreateFile Lib "icmp.dll" () As LongPrivate Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long
Private Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, _ ByVal DestinationAddress As Long, ByVal RequestData As String, ByVal RequestSize As Long, _ ByVal RequestOptions As Long, ReplyBuffer As ICMP_ECHO_REPLY, ByVal ReplySize As Long, _ ByVal Timeout As Long) As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, _ lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As LongPrivate Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, _ ByVal dwHostLen As Long) As Long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (xDest As Any, xSource As Any, ByVal nbytes As Long)
Private Declare Function inet_addr Lib "WSOCK32.DLL" (ByVal s As String) As Long
Private Sub Command1_Click() 'ping网络计算机 Dim ECHO As ICMP_ECHO_REPLY Dim pos As Long Dim success As Long Dim WSAD As WSADATA Dim aa As Boolean Dim mystr As String
aa = WSAStartup(WS_VERSION_REQD, WSAD) = 0 If aa Then Dim hPort As Long mystr = inet_addr(Text1.Text) If mystr <> INADDR_NONE Then hPort = IcmpCreateFile() If hPort Then Call IcmpSendEcho(hPort, mystr, Text2.Text, Len(Text2.Text), _ 0, ECHO, Len(ECHO), PING_TIMEOUT) '发送回响请求报文,返回回响应答报文 Call IcmpCloseHandle(hPort) End If If ECHO.status = 0 Then Label4(0).Caption = "ping成功" Else Label4(0).Caption = "ping失败" Label4(1).Caption = ECHO.Address '显示网络计算机地址 Label4(2).Caption = ECHO.RoundTripTime & " ms" '显示网络链接延迟时间 Label4(3).Caption = ECHO.DataSize & " bytes '显示数据包大小" Label4(4).Caption = ECHO.DataPointer End If End If End SubPrivate Sub Command2_Click() End End Sub
Private Const WS_VERSION_REQD As Long = &H101
Private Const INADDR_NONE As Long = &HFFFFFFFF
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const PING_TIMEOUT As Long = 500Private Type ICMP_OPTIONS
Ttl As Byte
Tos As Byte
Flags As Byte
OptionsSize As Byte
OptionsData As Long
End TypePrivate Type ICMP_ECHO_REPLY
Address As Long
status As Long
RoundTripTime As Long
DataSize As Long
DataPointer As Long
Data As String * 250
End Type
Private Type WSADATA
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
wMaxSockets As Long
wMaxUDPDG As Long
dwVendorInfo As Long
End TypePrivate Declare Function IcmpCreateFile Lib "icmp.dll" () As LongPrivate Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long
Private Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, _
ByVal DestinationAddress As Long, ByVal RequestData As String, ByVal RequestSize As Long, _
ByVal RequestOptions As Long, ReplyBuffer As ICMP_ECHO_REPLY, ByVal ReplySize As Long, _
ByVal Timeout As Long) As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, _
lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As LongPrivate Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, _
ByVal dwHostLen As Long) As Long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(xDest As Any, xSource As Any, ByVal nbytes As Long)
Private Declare Function inet_addr Lib "WSOCK32.DLL" (ByVal s As String) As Long
Private Sub Command1_Click() 'ping网络计算机
Dim ECHO As ICMP_ECHO_REPLY
Dim pos As Long
Dim success As Long
Dim WSAD As WSADATA
Dim aa As Boolean
Dim mystr As String
aa = WSAStartup(WS_VERSION_REQD, WSAD) = 0
If aa Then
Dim hPort As Long
mystr = inet_addr(Text1.Text)
If mystr <> INADDR_NONE Then
hPort = IcmpCreateFile()
If hPort Then
Call IcmpSendEcho(hPort, mystr, Text2.Text, Len(Text2.Text), _
0, ECHO, Len(ECHO), PING_TIMEOUT) '发送回响请求报文,返回回响应答报文
Call IcmpCloseHandle(hPort)
End If
If ECHO.status = 0 Then Label4(0).Caption = "ping成功" Else Label4(0).Caption = "ping失败"
Label4(1).Caption = ECHO.Address '显示网络计算机地址
Label4(2).Caption = ECHO.RoundTripTime & " ms" '显示网络链接延迟时间
Label4(3).Caption = ECHO.DataSize & " bytes '显示数据包大小"
Label4(4).Caption = ECHO.DataPointer
End If
End If
End SubPrivate Sub Command2_Click()
End
End Sub