vb hace ping a IP para obtener el valor de retraso
Usa la API:
''Este ejemplo muestra cómo enviar un paquete a una dirección IP a través de una llamada API y esperar una respuesta.
''Cree un nuevo proyecto, agregue un módulo estándar y escriba el siguiente código:
Option?Explicit
Public?Const?IP_STATUS_BASE?=? 11000
¿Público?Const?IP_SUCCESS?=?0
¿Público?Const?IP_BUF_TOO_SMALL?=?(11000?+?1)
¿Público?Const? IP_DEST_NET_UNREACHABLE ?=?(11000?+?2)
¿Público?Const?IP_DEST_HOST_UNREACHABLE?=?(11000?+?3)
¿Público?Const?IP_DEST_PROT_UNREACHABLE?=?(11000 ? +?4)
¿Pública?Const?IP_DEST_PORT_UNREACHABLE?=?(11000?+?5)
¿Pública?Const?IP_NO_RESOURCES?=?(11000?+?6)< / p>
¿Público?Const?IP_BAD_OPTION?=?(11000?+?7)
¿Público?Const?IP_HW_ERROR?=?(11000?+?8)
¿Pública?Const?IP_PACKET_TOO_BIG?=?(11000?+?9)
¿Pública?Const?IP_REQ_TIMED_OUT?=?(11000?+?10)
¿Pública?Const?IP_BAD_REQ? = ?(11000?+?11)
¿Público?Const?IP_BAD_ROUTE?=?(11000?+?12)
¿Público?Const?IP_TTL_EXPIRED_TRANSIT?=?(11000?+ 13)
¿Pública?Const?IP_TTL_EXPIRED_REASSEM?=?(11000?+?14)
¿Pública?Const?IP_PARAM_PROBLEM?=?(11000?+?15)
¿Público?Const?IP_SOURCE_QUENCH?=?(11000?+?16)
¿Público?Const?IP_OPTION_TOO_BIG?=?(11000?+?17)
¿Público? Const ?IP_BAD_DESTINATION?=?(11000?+?18)
¿Público?Const?IP_ADDR_DELETED?=?(11000?+?19)
¿Público?Const?IP_SPEC_MTU_CHANGE?=? ( 11000?+?20)
¿Público?Const?IP_MTU_CHANGE?=?(11000?+?21)
¿Público?Const?IP_UNLOAD?=?(11000?+?22 )
¿Pública?Const?IP_ADDR_ADDED?=?(11000?+?23)
¿Pública?Const?IP_GENERAL_FAILURE?=?(11000?+?50)
Público?Const?MAX_IP_STATUS?=?11000?+?50
Público
ic?Const?IP_PENDING?=?(11000?+?255)
¿Público?Const?PING_TIMEOUT?=?200
¿Público?Const?WS_VERSION_REQD?=?&H101
¿Público?Const?WS_VERSION_MAJOR?=?WS_VERSION_REQD?\?&H100?Y?&HFF&
¿Público?Const?WS_VERSION_MINOR?=?WS_VERSION_REQD?Y?&HFF&
¿Público? Const?MIN_SOCKETS _REQD?=?1
¿Público?Const?SOCKET_ERROR?=?-1
¿Público?Const?MAX_WSADescription?=?256
¿Público? Const?MAX_WSASYSStatus?=?128
¿Público?Tipo?ICMP_OPTIONS
Ttl?As?Byte
Tos?As?Byte
¿Banderas?¿Como?Byte
OpcionesTamaño?Como?Byte
OpcionesDatos?Como?Largo
Fin?Tipo
Dim?ICMPOPT? como?ICMP_OPTIONS
¿Tipo?Público?ICMP_ECHO_REPLY
Dirección?como?Larga
estado?como?Larga
Tiempo de ida y vuelta?como? Largo
¿Tamaño de datos?As?Integer
¿Reservado?As?Integer
¿Puntero de datos?As?Long
Opciones?As?ICMP_OPTIONS
¿Datos?¿Como?Cadena?*?250
Tipo?Final
¿Tipo?Público?HOSTENT
Nombre?Como?Long
¿Aliases?As?Long
HAddrType?As?Integer
HLen?As?Integer
hAddrList?As?Long
¿Tipo?Final
¿Tipo?Público?WSADATA
wVersión?As?Integer
wHighVersion?As?Integer
wHighVersion?p>
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
¿Pública?Declarar?Función ?IcmpCreateFile?Lib?" icmp.dll"?()?Como?Largo
¿Público?Declarar?Función?IcmpCloseHandle?Lib?"icmp.dll"? (¿PorVal?IcmpHandle?Como?Lo
ng)?As?Long
¿Público?Declarar?Función?IcmpSendEcho?Lib?"icmp.dll"?(ByVal?IcmpHandle?As?Long, ByVal?DestinationAddress?As?Long, ByVal?RequestData? ¿Como?Cadena, ¿ByVal?RequestSize?As?Integer, ¿ByVal?RequestOptions?As?Long,?ReplyBuffer?As?ICMP_ECHO_REPLY,?ByVal?ReplySize?As?Long,?ByVal?Timeout?As?Long)?As?Long
¿Pública? Declarar la función WSAGetLastError.
¿"WSOCK32.DLL"?()?Como?Long
Público?"WSOCK32.DLL"?(ByVal?wVersionRequired?Como?Long,?lpWSADATA?Como?WSADATA)?Como?Long
¿Público?Declarar?Función?WSACleanup?Lib?"WSOCK32.DLL"?()?Como?Long
Público?Declarar?Función?gethostname?Lib?"WSOCK32.DLL"?( ByVal?szHost?As?String,?ByVal?dwHostLen?As?Long)?As?Long
¿Público?Declarar?Función?gethostbyname?Lib?"WSOCK32.DLL"?(ByVal?szHost?As ?Cadena)?As?Long
Público?Declarar?Sub?RtlMoveMemory?Lib?"kernel32"?(hpvDest?As?Any,?ByVal?hpvSource?As?Long,?ByVal?cbCopy?As ?Long)
¿Pública?Función?GetStatusCode(status?As?Long)?As?String
Dim?msg?As?String
Seleccionar?Case?status p>
Caso?IP_SUCCESS:?msg?=?" ip?success"
Caso?IP_BUF_TOO_SMALL:?msg?=?" ip?buf?too_small"
Caso ?IP_DEST_NET_UNREACHABLE:?msg?=?" ip?dest?net?unreachable"
Caso?IP_DEST_HOST_UNREACHABLE:?msg?=?" ip?dest?host?unreachable"
Caso ?IP_DEST_PROT_UNREACHABLE:?msg?=?" ip?dest?prot?"ip.dest.prot.unreachable"
Caso?IP_DEST_PORT_UNREACHABLE:?msg?=?" /p>
Caso?IP_NO_RESOURCES:?msg?=?" ip.no.resources"
Caso?IP_BAD_OPTION:?msg?=?"
Caso?IP_BAD_OPTION: ?msg?=?" ip.bad?option"
Caso?IP_HW_ERROR:?msg?=?" ip?hw_error"
Caso?IP_PACKET_TOO_BIG:?msg?=?" ip?packet?too_big"
Caso?IP_REQ_TIMED_OUT:?msg?=?" ip?req?timed?out"
Caso?IP_BAD_REQ:?msg?=?" bad?req"
Caso?IP_BAD_ROUTE:?msg?=?"
Caso?IP_BAD_ROUTE:?msg?=?" ip?bad?route"
Caso?IP_TTL_EXPIRED_TRANSIT:?msg?=?" ip?ttl?expired?transit"
Caso?IP_TTL_EXPIRED_REASSEM:?msg?=? "ip?ttl?expired?reassembly"
Caso?IP_PARAM_PROBLEM:?msg?=? "ip?param_problem"
Caso ?IP_SOURCE_QUENCH:?msg?=?" ip?source?quench"
Caso?IP_OPTION_TOO_BIG:?msg?=?" ip?option?too_big"
Caso?IP_BAD_DESTINATION:? msg?=?" ip?bad?destination"
Caso?IP_ADDR_DELETED:?msg?=?" ip?addr?Delete"
Caso?IP_SPEC_MTU_CHANGE:?msg?=? " ip?spec?mtu_change"
Caso?IP_MTU_CHANGE:?msg?=?" ip?mtu_change"
Caso?IP_UNLOAD:?msg?=?" ip?unload"
Caso?IP_ADDR_ADDED:?msg?=?" ip?addr?added"
Caso?IP_GENERAL_FAILURE:?msg?=?" ip general falló"
¿Caso?IP_PENDING:?msg?=?"ip pendiente"
Caso?PING_TIMEOUT:?msg?=?"ping timeout"
Caso?Else:?msg?=? El mensaje desconocido devuelve"
¿Fin? ¿Seleccionar?
GetStatusCode?=?CStr(status)??[ ? &?msg?&?" ?]"
Función final
¿Pública?Función?HiByte(ByVal?wParam?As?Integer)
HiByte?=?wParam?\?&H1?And?&HFF&
¿Fin?Función
¿Función?Pública?LoByte(ByVal?wParam?As?Integer)
LoByte?=?wParam?HFF&
Fin de función
¿Función?Pública?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 ? Esto"
dwAddress?=?AddressStringToLong(szAddress)
hPort?=?IcmpCreateFile()
If?IcmpSendEcho(hPort,?dwAddress,?sDataToSend , Len(sDataToSend), 0, ECHO, Len(ECHO), PING_TIMEOUT), entonces
'ping es exitoso,
'. El estado será 0.
' .RoundTripTime es el tiempo (en milisegundos) en que se completa el ping,
'.Data son los datos devueltos (terminados en NULL),
' .Address es la dirección IP de respuesta real,
'.Status será 0.
La dirección de respuesta real
'.DataSize es el tamaño de la cadena en .Data
Ping = ECHO.RoundTripTime
Else
Ping = ECHO.status *?-1
¿Fin?Si
Llamar?IcmpCloseHandle(hPort)
¿Fin?Función
Función ? AddressStringToLong(ByVal?tmp?As?String)?As?Long
Dim?i?As?Integer
Dim?parts(1?To?4?)?As? Cadena
i?=?0
'¿Tenemos?que?extraer?cada?parte?de?
' 123.456.789.123?cadena,? delimitado ?
'Un punto
Cuando InStr(tmp,?" .") ?0
i?=?i?+?1< / p>
partes(i)? =?Mid(tmp,?1,?InStr(tmp,?"" ."") ?-?1)
tmp?=?Mid(tmp) , ?InStr(tmp,?" ."") ?.")?+?1)
Wend
i?=?i?+?1
partes(i) ? =?tmp
Si?i?<>?4?Entonces
AddressStringToLong?=?0
¿Salir?Función p >
End?If
AddressStringToLong?=?Val("& & amp;H"? amp;H"? &?Right("00"? &?Hex(partes(4) ) ,?2)? &?__
Derecha("00"? &?Hex(partes(3)),?2)? &?_
Derecha("00) " ? &?Hex(partes(2)),?2)? &?_
Derecha("00"? &?Hex(partes(1)),?2))
¿Fin?Función
¿Función?Pública?SocketsCleanup()?As?Boolean
Dim?X?As?Long
X?=?WSACleanup ( )
¿Si?X?<>?0?Entonces
¿MsgBox?"Error de sockets de Windows"? ocurrió?en?Limpieza.",?vbExclamation
SocketsCleanup?=?False
Else
SocketsCleanup?=?True
Fin ?If
Fin?Función
¿Pública?Función?SocketsInitialize()?As?Booleano
Dim?WSAD?As?WSADATA
Dim? p>
Si?X?<>?0?Entonces
MsgBox.?" para Windo de 32 bits
¿Sockets de Windows para ws"?
MsgBox?"
MsgBox. El medio ambiente no respondió con éxito. "
SocketsInitialize="False"
Salir de la función
Fin "If"
If "LoByte(WSAD.wVersion)"< "WS_VERSION_MAJOR "O"(LoByte(WSAD.wVersion)"="WS_VERSION_MAJOR")Entonces
szHiByte?=?Trim$(Str$(HiByte(WSAD.wVersion)))
szLoByte?=?Trim$(Str$(LoByte(WSAD.wVersion)))
szBuf?=?" Windows?SzLoByte?szHiByte
szBuf?=?no es compatible por el soporte de Windows. Hay sockets disponibles para entornos Windows de 32 bits. "
MsgBox?szBuf,?vbExclamation
SocketsInitialize?=?False
¿Salir?Función
Fin?Si
Si?WSAD.wMaxSockets?
szBuf?=?"?Esta aplicación requiere al menos""? &?Trim$(Str$(MIN_SOCKETS_REQD))? &?Trim $(Str$(MIN_SOCKETS_REQD))?Enchufes admitidos. "
MsgBox?szBuf,?vbExclamation
SocketsInitialize?=?False
¿Salir?Función
Fin?Si
SocketsInitialize?=?True
¿Fin?Función
'************************ **************************************
'''En Agregue un botón de comando Comando1, un cuadro de texto Texto2 y cree una matriz de cuadro de texto (Texto1(0) a Texto1(5) Escriba el siguiente código en el formato:
Privado?Sub?Command1_Click().
¿Atenuar?ECHO?As?ICMP_ECHO_REPLY
Atenuar?pos?As?Integer
Llamar a ?Ping(Text2.Text,?ECHO)
Texto1(0)?=?GetStatusCode(ECHO.status)
Texto1(1)?=?ECHO.Dirección
Texto1(2)?=?ECHO. ?&?ms"
Text1(3)? =?ECHO.DataSize?bytes"
If?Left$(ECHO.Data,?1)?<>? (0)?Entonces
pos?=?InStr(ECHO.Data,?Chr$(0))
Text1(4)?=?Left$(ECHO. Data, ?1)
Fin?Si
Texto1(5) =?ECHO.DataPointer
Fin?Sub