vb ping ip获得延迟值

怎么用winsock控件去ping一个IP获得最大延迟值并回显到text1中
以ping ip121.12.174.219为列子

用API 吧:

''本例演示了怎样通过API的调用向一个IP地址发送一个包的数据并等待回音?

''新建一个工程,添加一个标准模块,写入以下代码:

Option Explicit

Public Const IP_STATUS_BASE = 11000

Public Const IP_SUCCESS = 0

Public Const IP_BUF_TOO_SMALL = (11000 + 1)

Public Const IP_DEST_NET_UNREACHABLE = (11000 + 2)

Public Const IP_DEST_HOST_UNREACHABLE = (11000 + 3)

Public Const IP_DEST_PROT_UNREACHABLE = (11000 + 4)

Public Const IP_DEST_PORT_UNREACHABLE = (11000 + 5)

Public Const IP_NO_RESOURCES = (11000 + 6)

Public Const IP_BAD_OPTION = (11000 + 7)

Public Const IP_HW_ERROR = (11000 + 8)

Public Const IP_PACKET_TOO_BIG = (11000 + 9)

Public Const IP_REQ_TIMED_OUT = (11000 + 10)

Public Const IP_BAD_REQ = (11000 + 11)

Public Const IP_BAD_ROUTE = (11000 + 12)

Public Const IP_TTL_EXPIRED_TRANSIT = (11000 + 13)

Public Const IP_TTL_EXPIRED_REASSEM = (11000 + 14)

Public Const IP_PARAM_PROBLEM = (11000 + 15)

Public Const IP_SOURCE_QUENCH = (11000 + 16)

Public Const IP_OPTION_TOO_BIG = (11000 + 17)

Public Const IP_BAD_DESTINATION = (11000 + 18)

Public Const IP_ADDR_DELETED = (11000 + 19)

Public Const IP_SPEC_MTU_CHANGE = (11000 + 20)

Public Const IP_MTU_CHANGE = (11000 + 21)

Public Const IP_UNLOAD = (11000 + 22)

Public Const IP_ADDR_ADDED = (11000 + 23)

Public Const IP_GENERAL_FAILURE = (11000 + 50)

Public Const MAX_IP_STATUS = 11000 + 50

Public Const IP_PENDING = (11000 + 255)

Public Const PING_TIMEOUT = 200

Public Const WS_VERSION_REQD = &H101

Public Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&

Public Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&

Public Const MIN_SOCKETS_REQD = 1

Public Const SOCKET_ERROR = -1

Public Const MAX_WSADescription = 256

Public Const MAX_WSASYSStatus = 128

Public Type ICMP_OPTIONS

Ttl As Byte

Tos As Byte

Flags As Byte

OptionsSize As Byte

OptionsData As Long

End Type

Dim ICMPOPT As ICMP_OPTIONS

Public Type ICMP_ECHO_REPLY

Address As Long

status As Long

RoundTripTime As Long

DataSize As Integer

Reserved As Integer

DataPointer As Long

Options As ICMP_OPTIONS

Data As String * 250

End Type

Public Type HOSTENT

hName As Long

hAliases As Long

hAddrType As Integer

hLen As Integer

hAddrList As Long

End Type

Public Type WSADATA

wVersion As Integer

wHighVersion As Integer

szDescription(0 To MAX_WSADescription) As Byte

szSystemStatus(0 To MAX_WSASYSStatus) As Byte

wMaxSockets As Integer

wMaxUDPDG As Integer

dwVendorInfo As Long

End Type

Public Declare Function IcmpCreateFile Lib "icmp.dll" () As Long

Public Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long

Public Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, ByVal DestinationAddress As Long, ByVal RequestData As String, ByVal RequestSize As Integer, ByVal RequestOptions As Long, ReplyBuffer As ICMP_ECHO_REPLY, ByVal ReplySize As Long, ByVal Timeout As Long) As Long

Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long

Public Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long

Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long

Public Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, ByVal dwHostLen As Long) As Long

Public Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As Long

Public Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

Public Function GetStatusCode(status As Long) As String

Dim msg As String

Select Case status

Case IP_SUCCESS: msg = "ip success"

Case IP_BUF_TOO_SMALL: msg = "ip buf too_small"

Case IP_DEST_NET_UNREACHABLE: msg = "ip dest net unreachable"

Case IP_DEST_HOST_UNREACHABLE: msg = "ip dest host unreachable"

Case IP_DEST_PROT_UNREACHABLE: msg = "ip dest prot unreachable"

Case IP_DEST_PORT_UNREACHABLE: msg = "ip dest port unreachable"

Case IP_NO_RESOURCES: msg = "ip no resources"

Case IP_BAD_OPTION: msg = "ip bad option"

Case IP_HW_ERROR: msg = "ip hw_error"

Case IP_PACKET_TOO_BIG: msg = "ip packet too_big"

Case IP_REQ_TIMED_OUT: msg = "ip req timed out"

Case IP_BAD_REQ: msg = "ip bad req"

Case IP_BAD_ROUTE: msg = "ip bad route"

Case IP_TTL_EXPIRED_TRANSIT: msg = "ip ttl expired transit"

Case IP_TTL_EXPIRED_REASSEM: msg = "ip ttl expired reassem"

Case IP_PARAM_PROBLEM: msg = "ip param_problem"

Case IP_SOURCE_QUENCH: msg = "ip source quench"

Case IP_OPTION_TOO_BIG: msg = "ip option too_big"

Case IP_BAD_DESTINATION: msg = "ip bad destination"

Case IP_ADDR_DELETED: msg = "ip addr deleted"

Case IP_SPEC_MTU_CHANGE: msg = "ip spec mtu change"

Case IP_MTU_CHANGE: msg = "ip mtu_change"

Case IP_UNLOAD: msg = "ip unload"

Case IP_ADDR_ADDED: msg = "ip addr added"

Case IP_GENERAL_FAILURE: msg = "ip general failure"

Case IP_PENDING: msg = "ip pending"

Case PING_TIMEOUT: msg = "ping timeout"

Case Else: msg = "unknown msg returned"

End Select

GetStatusCode = CStr(status) & " [ " & msg & " ]"

End Function

Public Function HiByte(ByVal wParam As Integer)

HiByte = wParam \ &H1 And &HFF&

End Function

Public Function LoByte(ByVal wParam As Integer)

LoByte = wParam And &HFF&

End Function

Public Function Ping(szAddress As String, ECHO As ICMP_ECHO_REPLY) As Long

Dim hPort As Long

Dim dwAddress As Long

Dim sDataToSend As String

Dim iOpt As Long

sDataToSend = "Echo This"

dwAddress = AddressStringToLong(szAddress)

hPort = IcmpCreateFile()

If IcmpSendEcho(hPort, dwAddress, sDataToSend, Len(sDataToSend), 0, ECHO, Len(ECHO), PING_TIMEOUT) Then

'the ping succeeded,

'.Status will be 0

'.RoundTripTime is the time in ms for the ping to complete,

'.Data is the data returned (NULL terminated)

'.Address is the Ip address that actually replied

'.DataSize is the size of the string in .Data

Ping = ECHO.RoundTripTime

Else

Ping = ECHO.status * -1

End If

Call IcmpCloseHandle(hPort)

End Function

Function AddressStringToLong(ByVal tmp As String) As Long

Dim i As Integer

Dim parts(1 To 4) As String

i = 0

'we have to extract each part of the

'123.456.789.123 string, delimited by

'a period

While InStr(tmp, ".") > 0

i = i + 1

parts(i) = Mid(tmp, 1, InStr(tmp, ".") - 1)

tmp = Mid(tmp, InStr(tmp, ".") + 1)

Wend

i = i + 1

parts(i) = tmp

If i <> 4 Then

AddressStringToLong = 0

Exit Function

End If

AddressStringToLong = Val("&H" & Right("00" & Hex(parts(4)), 2) & _

Right("00" & Hex(parts(3)), 2) & _

Right("00" & Hex(parts(2)), 2) & _

Right("00" & Hex(parts(1)), 2))

End Function

Public Function SocketsCleanup() As Boolean

Dim X As Long

X = WSACleanup()

If X <> 0 Then

MsgBox "Windows Sockets error " & Trim$(Str$(X)) & " occurred in Cleanup.", vbExclamation

SocketsCleanup = False

Else

SocketsCleanup = True

End If

End Function

Public Function SocketsInitialize() As Boolean

Dim WSAD As WSADATA

Dim X As Integer

Dim szLoByte As String, szHiByte As String, szBuf As String

X = WSAStartup(WS_VERSION_REQD, WSAD)

If X <> 0 Then

MsgBox "Windows Sockets for 32 bit Windows " & "environments is not successfully responding."

SocketsInitialize = False

Exit Function

End If

If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then

szHiByte = Trim$(Str$(HiByte(WSAD.wVersion)))

szLoByte = Trim$(Str$(LoByte(WSAD.wVersion)))

szBuf = "Windows Sockets Version " & szLoByte & "." & szHiByte

szBuf = szBuf & " is not supported by Windows " & "Sockets for 32 bit Windows environments."

MsgBox szBuf, vbExclamation

SocketsInitialize = False

Exit Function

End If

If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then

szBuf = "This application requires a minimum of " & Trim$(Str$(MIN_SOCKETS_REQD)) & " supported sockets."

MsgBox szBuf, vbExclamation

SocketsInitialize = False

Exit Function

End If

SocketsInitialize = True

End Function

'***************************************************************

'''在Form中添加一个命令按钮Command1,一个文本框Text2,创建一个TextBox数组(Text1(0)到Text1(5))。在窗体中写入如下代码:

Private Sub Command1_Click()

Dim ECHO As ICMP_ECHO_REPLY

Dim pos As Integer

Call Ping(Text2.Text, ECHO)

Text1(0) = GetStatusCode(ECHO.status)

Text1(1) = ECHO.Address

Text1(2) = ECHO.RoundTripTime & " ms"

Text1(3) = ECHO.DataSize & " bytes"

If Left$(ECHO.Data, 1) <> Chr$(0) Then

pos = InStr(ECHO.Data, Chr$(0))

Text1(4) = Left$(ECHO.Data, pos - 1)

End If

Text1(5) = ECHO.DataPointer

End Sub

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-30
开始、运行、输入CMD ,打开以后输入ping 121,12,174.219 >d:text1.txt
第2个回答  2011-05-30
ping 121.12.174.219 -t > d:\1234.txt

VB.net 如何ping一个ip地址并获取延迟值?
Boolean = My.Computer.Network.Ping("192.168.1.1", 1000) '返回ping结果,true表示通,false表示不通,1000表示1000毫秒内返回结果 If b = True Then '指定时间内ping通 Shell("cmd \/c ping 192.168.1.1 >> C:\\time.txt") '在C盘time.txt文件中保存ping的结果 Else '超时 ...

求VB按时间PING指定IP,并返回ping值中的最大延迟值。
text1输入ip text2返回最大延迟

VB 怎么实现ping
'Ping 模块,用法:PingIP("202.108.22.142", TTL(可选,默认10), TimeOut(可选,默认1000)),返回延时时长 '注意:不能ping域名。Private Type ip_option_information TTL As Byte 'Time To Live Tos As Byte 'Type Of Service Flags As Byte 'IP header flags OptionsSize As Byte 'Size ...

怎样在VB.net中获得ping命令的结果
Private Const IP_UNLOAD As Long = (11000 + 22)Private Const IP_ADDR_ADDED As Long = (11000 + 23)Private Const IP_GENERAL_FAILURE As Long = (11000 + 50)Private Const MAX_IP_STATUS As Long = (11000 + 50)Private Const IP_PENDING As Long = (11000 + 255)Private Const P...

求VB按时间PING一个IP,并且显示速度。
Private Const IP_GENERAL_FAILURE As Long = (11000 + 50)Private Const MAX_IP_STATUS As Long = (11000 + 50)Private Const IP_PENDING As Long = (11000 + 255)Private Const PING_TIMEOUT As Long = 500 Private Const WS_VERSION_REQD As Long = &H101 Private Const MIN_SOCKETS_...

用VB.NET怎么编一个ping的程序
Net.NetworkInformation.PingReply = m_ping.Send("192.168.1.1", 1000)'设置为自己要ping的ip地址 If m_PingReply.Status = Net.NetworkInformation.IPStatus.Success Then MsgBox(m_PingReply.RoundtripTime)'返回网络延迟 Else'返回不通的原因 MsgBox(m_PingReply.Status.ToString)End If ...

vb怎么实现ping,并将ping结果搞到手。
Dim pid As Long pid = Shell("cmd.exe \/C Ping " & Text1.Text & " > c:\\r.txt", vbHide) ' 提示 Text2.Text = "正在执行Ping " & Text1.Text & " ..." '等待Shell执行结束 Dim hProc As Long hProc = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid) ...

怎么在vb中调用ping命令,并将ping的过程显示在vb界面中,就是把运行...
添加一个文本框 Set objShell = CreateObject("WScript.Shell")Set objWshScriptExec = objShell.Exec("ping 192.168.6.242")Set objStdOut = objWshScriptExec.StdOut Do Until objStdOut.AtEndOfStream strLine = objStdOut.ReadLine Text1.Text = Text1.Text & strLine & vbNewLine Loop ...

VB调用PING命令
Public Function Pings(strMachines As String) As Boolean aMachines = Split(strMachines, ";")For Each machine In aMachines Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & machine & "'")For Each ...

VB知道局域网计算机名,ping是否在线。
知道对方ip查看对方的计算机名 方法: 开始->运行->cmd->nbtstat -a 对方ip 开始->运行->cmd->net view 对方ip 知道对方计算机名查看对方ip 方法:开始->运行->cmd->ping 对方计算机名 或者 开始->运行->cmd->nbtstat -a 对方计算机名 ...

相似回答