Red de conocimiento informático - Problemas con los teléfonos móviles - vb hace ping a IP para obtener el valor de retraso

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

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

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