Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo implementar estadísticas de IP en vb

Cómo implementar estadísticas de IP en vb

GetIpAddrTable ByVal 0amp;, Ret, True

Si Ret lt; = 0, entonces salga de Sub

ReDim bBytes(0 To Ret - 1) como byte

GetIpAddrTable bBytes(0), Ret, False

Listado de CopyMemory.dEntrys, bBytes(0), 4

Listado de CopyMemory.mIPInfo(0), bBytes(4), Len(Listing. mIPInfo(0))

'Obtener IP aquí

T_ip.Text = ConvertAddressToString(Listing.mIPInfo(0).dwAddr)

--- -- --------------------------------------- ---- - -------------------

Función de declaración pública GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable como byte, pdwSize como largo, ByVal ordenar como largo) Mientras

Declaración pública Sub CopyMemory Lib "kernel32" Alias ​​​​"RtlMoveMemory" (destino como cualquiera, origen como cualquiera, longitud ByVal tan larga)

Const MAX_IP = 5

Escriba IPINFO

dwAddr mientras

dwIndex mientras

dwMask mientras

dwBCastAddr mientras

dwReasmSize como largo

no utilizado1 como entero

no utilizado2 como entero

Tipo final

Tipo MIB_IPADDRTABLE

dEntrys tan largas

mIPInfo(MAX_ IP) como IPINFO

Tipo de fin

Escriba IP_Array

mBuffer como MIB_IPADDRTABLE

BufferLen tan largo

EndType

Función pública ConvertAddressToString(longAddr As Long) como cadena

Dim MyByte(3) como byte

Dim Cnt As Long

CopyMemory MyByte(0), longAddr, 4

Tipo final

Público longAddr, 4

Para Cnt = 0 a 3

ConvertAddressToString = ConvertAddressT

oString CStr(MyByte(Cnt)) "."

Siguiente Cnt

ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1)

Fin de función

yadianer:

Solo aplicable a la computadora local, la forma más fácil es usar winsock, como se mencionó anteriormente

La siguiente es la API

Detecta la dirección IP utilizada actualmente en el dispositivo

'Configura hasta 5 grupos de direcciones IP que pueden usarse en la computadora y úsalas para generar buffers

Private Const MAX_IP = 10

Tipo privado IPINFO

dwAddr As Long 'Dirección IP

dwNICIndex As Long 'Índice de interfaz de tarjeta de red

dwSubnetMask As Long 'Código de máscara de subred

dwSubnetMask As Long ' Máscara de subred

dwSubnetMask As Long ' Dirección IP As Long ' Máscara de subred

dwBroadCastAddr As Long ' Dirección de transmisión del paquete

dwReAssemblySize As Long 'Tamaño de ensamblaje

sin usar1 Como entero 'Aún no se usa

sin usar2 Como entero 'Aún no se usa

dwNICIndex As Long ' Índice de interfaz de tarjeta de red

dwSubnetMask As Long

Tipo final

Tipo privado MIB_IPADDRTABLE

dwEntrys As Long ' Formulario Número de inicios de sesión en

arIPInfo(MAX_IP) As IPINFO ' Matriz de direcciones IP de inicio de sesión

Tipo final

Tipo privado IP_Array

mBuffer As MIB_IPADDRTABLE 'Dirección IP matriz de lista

BufferLen As Long 'Longitud del búfer

Tipo final

Declaración privada Sub CopyMemory Lib "kernel32" Alias ​​​​"RtlMoveMemory" (Destino como cualquiera,

Función de declaración privada GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long

' Convierte entero largo en cadena

Función pública ConvertAddr2Str(LongAddress As Long) como cadena

Dim addrByte(3) como byte

Atenuar Cnt mientras

CopyMemory addrByte(0), LongAddress, 4

Para Cnt = 0 a 3

ConvertAddr2Str = ConvertAddr2Str CStr(addrByte(Cnt)) "."

Siguiente Cnt

ConvertAddr2Str = Left$(ConvertAddr2Str, Len(ConvertAddr2Str) - 1)

Función final

Private Sub Form_Load()

Text1.p>

Text1.Text = ""

Me.Caption = "Obtener la IP dirección utilizada en la computadora"

Text1.Font.Size = 11

Inicio

Fin Sub

Sub privado Form_Resize ()

Texto1.Height = Me.Height - 38 * Screen.TwipsPerPixelY

Text1.Width = Me.Width - 20 * Screen.TwipsPerPixelY

Fin Sub

p>

Private Sub Form_Resize ()

Texto1.Height = Me.Height - 38 * Screen.TwipsPerPixelY

Text1.Width = Me.Width - 20 * Screen.TwipsPerPixelYPrivate Sub Start()

Dim lRet As Long, I As Long

Dim Buffer() Como Byte

Dim ListDatas Como MIB_IPADDRTABLE

Text1 = ""

Error en caso de error Ir a

GetIpAddrTable ByVal 0amp;, lRet, True

Si lRet lt;= 0, entonces salga Sub

ReDim Buffer(0 To lRet - 1) As Byte

' Obtiene datos sobre la dirección IP

GetIpAddrTable Buffer(0), lRet, False

Debug.Print Buffer(0)

' Utilice los primeros cuatro bytes de la dirección IP instalada para obtener información de inicio de sesión

CopyMemory ListDatas.dwEntrys, Buffer(0 ), 4

p>

Text1 = "En su computadora, *** hay "&ListDatas.dwEntrys&" configurados para usar la dirección IP

Grupo de direcciones " & vbCrLf

Text1 = Text1 & String(45, "=") & vbCrLf

For I = 0 To ListDatas.dwEntrys - 1

'Copiar la estructura de direcciones en memoria a la lista

CopyMemory ListDatas.arIPInfo(I), Buffer(4 (I)), Buffer(4 (I * Len(ListDatas.arIPInfo( 0))) ), Len(ListDatas.arIPInfo(I))

Texto1 = Texto1 amp; "Dirección IP:" amp ConvertAddr2Str(ListDatas.

Texto1 = Texto1 amp; "Máscara de subred IP; :" & ConvertAddr2Str(ListDatas.arIPInfo(I).dwAddr) & vbCrLf

Texto1 = Texto1 & "Máscara de subred IP:" & ConvertAddr2Str(ListDatas. arIPInfo(I).dwSubnetMask) amp; vbCrLf

Text1 = Text1 amp; "Dirección de transmisión IP:" amp; ConvertAddr2Str(ListDatas.arIPInfo(I).dwBroadCastAddr) vbCrLf

Text1 = Text1 String ( 45, "*") amp; vbCrLf amp; vbCrLf

Siguiente

Salir del sub

Errores:

Finalizar el sub

yadianer:

Si desea anclar la extranet, puede utilizar el siguiente método: El principio se basa en DESCRIPTION_LENGTH obtenido de la página visitada As Long = 128

Const privada MAX_ADAPTER_ADDRESS_LENGTH Mientras = 8

Tipo privado IP_ADDRESS_STRING

IpAddr( 0 a 15) como byte

Tipo final

Tipo privado IP_MASK_STRING

IpMask(0 a 15) como byte

Tipo final

Tipo privado IP_ADDR_STRING

dwNext siempre

Dirección IP como IP_ADDRESS_STRING

Máscara Ip como IP_MASK_STRING

dwContext como largo

Tipo final

Tipo privado IP_ADAPTER_STRING Tipo privado IP_ADAPTER_INFO

dwNext siempre

ComboIndex mientras 'Reservado

<

p> sAdapterName(0) a (MAX_ADAPTER_STRING)dwAddressLength como largo

sIPAddress(0 a (MAX_ADAPTER_ ADDRESS_LENGTH - 1)) como byte

dwIndex como largo

uType tan largo

uDhcpEnabled tan largo

CurrentIpAddress tan largo

IpAddressList como IP_ADDR_STRING

GatewayList como IP_ADDR_STRING

DhcpServer As IP_ADDR_STRING

Función de declaración privada URLDownloadToFile Lib "urlmon" _

Alias ​​​​"URLDownloadToFileA" _

(ByVal pCaller As Long, _

ByVal szURL como cadena, _

ByVal szFileName como cadena, _

ByVal dwReserved como larga, _

ByVal lpfnCB como larga) como larga

Función de declaración privada DeleteUrlCacheEntry Lib "Wininet.dll" _

Alias ​​"DeleteUrlCacheEntryA" _

(ByVal lpszUrlName como cadena) siempre y cuando

Función de declaración privada lstrlenW Lib "kernel32" _

(ByVal lpString As Long) As Long

Private Sub Form_Load()

Command1.Caption = "Obtener IP pública"

Text1.Text = LocalIPAddress()

Text2.Text = ""

Fin Sub

Privado Sub Command1_Click()

Text2.= GetPublicIP()

End Sub

Función privada GetPublicIP()

Dim sSourceUrl As String

Atenuar sLocalFile como cadena

Atenuar hfile mientras

Atenuar buff como cadena

Atenuar pos1 mientras

Dim pos2 As Long

'sitio que devuelve la dirección IP

sSourceUrl = ".mvps.org/resources/tools/getpublicip.shtml"

sLocalFile = "c :\ip

.txt"

'Asegúrese de que este archivo no exista en el caché

Llame a DeleteUrlCacheEntry(sSourceUrl)

'Descargue el archivo de IP pública,

'Leer en el búfer y eliminar

Si DownloadFile(sSourceUrl, sLocalFile) Entonces

'Descargar este archivo del caché) entonces

hfile = FreeFile.

Abrir sLocalFile para ingresar como #hfile

buff = Input$(LOF(hfile), hfile)

Cerrar #hfile

'Encuentra la línea IP

pos1 = InStr(buff, "var ip =")

'Si la encuentra,

Si pos1 Entonces

'Obtener la posición de la primera y última palabra

'Comillas alrededor de la dirección (por ejemplo, '11.22.33.X').

g. '11.22.33.44')

pos1 = InStr(pos1 1, buff, "'", vbTextCompare) 1

pos2 = InStr(pos1 1, buff, "'" , vbTextCompare) '- 1

'Devolver dirección IP

GetPublicIP = Mid$(buff, pos1, pos2 - pos1)

Else

GetPublicIP = "(No se puede resolver la IP)"

Finalizar si 'pos1

Eliminar sLocalFile

De lo contrario

GetPublicIP = " ( No se puede acceder a la página shtml)"

Finalizar si 'Descargar archivo

Finalizar función

Función privada Descargar archivo (ByVal sURL como cadena,_

ByVal sLocalFile As String) Como booleano

DownloadFile = URLDownloadToFile(0, sURL, sLocalFile, 0, 0) = ERROR_SUCCESS

Fin de función

Función privada LocalIPAddress() como cadena

Dim cbRequired mientras

Dim buff() como byte

Dim ptr1 mientras

Atenuar sIPAddr como cadena

Atenuar adaptador como IP_ADAPTER_INFO

Llamar a GetAdaptersInfo(ByVal 0amp;, cbRequired)

Si cbRequired >0 entonces

ReDim buff(0 a cbRequired - 1) como byte

Si GetAdaptersInfo (buff(0), cbRequired) = ERROR_SUCCESS Entonces

'Se almacena en buff()

< Puntero a datos en p>

ptr1 = VarPtr(buff(0))

Do While (ptr1 lt; en el miembro IpAddr

sIPAddr = TrimNull( StrConv (.IpAddressList.IpAddress.IpAddr, vbUnicode))

Si Len(sIPAddr) gt; 0, entonces salga Do

ptr1 = .dwNext

Finalice con ' With Adapter

'ptr1 es 0 cuando (no más adaptadores)

Loop 'Do While (ptr1 lt; gt; 0)

End If 'If GetAdaptersInfo

Finalizar si '

Si cbRequired gt; 0

' Devuelve cualquier cadena encontrada

LocalIPAddress = sIPAddr

Función final

Función privada TrimNull(startstr As String ) Como cadena

TrimNull = Left$(startstr, lstrlenW(StrPtr(startstr)))

Función final