Cómo implementar estadísticas de IP en vb
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>
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 p>
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 p>
Text1 = Text1 amp; "Dirección de transmisión IP:" amp; ConvertAddr2Str(ListDatas.arIPInfo(I).dwBroadCastAddr) vbCrLf p>
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 p>
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 p>
'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