Título: Recuperar la IP Publica
Publicado por: LeandroA en 2 Agosto 2007, 18:06 pm
Buenas se que quienes tienen Router el winsock no devuelve la ip publica, yo en mi caso como no tengo router no se como hacerlo, pero me gustaria saver como se puede conseguir la ip publica sin tener que recurrir a una web. (estoy ablando de hacerlo por codigo) bien un amigo me paso este ejemplo 'In Module1:
'****************************************************************** 'Created By Verburgh Peter. ' 07-23-2001 ' verburgh.peter@skynet.be '------------------------------------- 'With this small application , you can detect the IP's installed on your computer, 'including subnet mask , BroadcastAddr.. ' 'I've wrote this because i've a programm that uses the winsock control, but, 'if you have multiple ip's installed on your pc , you could get by using the Listen ' method the wrong ip ... 'Because Winsock.Localip => detects the default ip installed on your PC , ' and in most of the cases it could be the LAN (nic) not the WAN (nic) 'So then you have to use the Bind function ,to bind to your right ip.. 'but how do you know & find that ip ? 'you can find it now by this appl.. it check's in the api.. IP Table.. '******************************************************************
Const MAX_IP = 5 'To make a buffer... i dont think you have more than 5 ip on your pc..
Type IPINFO dwAddr As Long ' IP address dwIndex As Long ' interface index dwMask As Long ' subnet mask dwBCastAddr As Long ' broadcast address dwReasmSize As Long ' assembly size unused1 As Integer ' not currently used unused2 As Integer '; not currently used End Type
Type MIB_IPADDRTABLE dEntrys As Long 'number of entries in the table mIPInfo(MAX_IP) As IPINFO 'array of IP address entries End Type
Type IP_Array mBuffer As MIB_IPADDRTABLE BufferLen As Long End Type
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long Sub main() Form1.Show End Sub
'converts a Long to a string Public Function ConvertAddressToString(longAddr As Long) As String Dim myByte(3) As Byte Dim Cnt As Long CopyMemory myByte(0), longAddr, 4 For Cnt = 0 To 3 ConvertAddressToString = ConvertAddressToString + CStr(myByte(Cnt)) + "." Next Cnt ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1) End Function
Public Sub Start() Dim Ret As Long, Tel As Long Dim bBytes() As Byte Dim Listing As MIB_IPADDRTABLE
On Error GoTo END1 GetIpAddrTable ByVal 0&, Ret, True
If Ret <= 0 Then Exit Sub ReDim bBytes(0 To Ret - 1) As Byte 'retrieve the data GetIpAddrTable bBytes(0), Ret, False 'Get the first 4 bytes to get the entry's.. ip installed CopyMemory Listing.dEntrys, bBytes(0), 4 'MsgBox "IP's found : " & Listing.dEntrys => Founded ip installed on your PC.. Form1.AutoRedraw = True Form1.Print Listing.dEntrys & " IP addresses found on your PC !!" Form1.Print "----------------------------------------" For Tel = 0 To Listing.dEntrys - 1 'Copy whole structure to Listing.. ' MsgBox bBytes(tel) & "." CopyMemory Listing.mIPInfo(Tel), bBytes(4 + (Tel * Len(Listing.mIPInfo(0)))), Len(Listing.mIPInfo(Tel)) Form1.Print "IP address : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr) Form1.Print "IP Subnetmask : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwMask) Form1.Print "BroadCast IP address : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwBCastAddr) Form1.Print "**************************************" & vbCrLf Form1.Refresh Next
'MsgBox ConvertAddressToString(Listing.mIPInfo(1).dwAddr) Exit Sub END1: MsgBox "ERROR" End Sub
Private Sub Form_Load() Module1.Start End Sub en su caso le aparecio en la tercera posicion su ip publica alguno de los que tengan un router se anima a ver si puede obtener unicamente esa ip Gracias y saludos aca hay otro codigo parecido, aver si este muestra la ip publica http://www.recursosvisualbasic.com.ar/htm/listado-api/api-55-ip-GetIpAddrTable.htm
Título: Re: Recuperar la IP Publica
Publicado por: Freeze. en 2 Agosto 2007, 21:12 pm
Con los sockets...
Puede ser con la API o con el control Winsock...
Muy Facil...
Título: Re: Recuperar la IP Publica
Publicado por: LeandroA en 2 Agosto 2007, 21:43 pm
no no noes facil creo que no me entendiste, no dije ip privada dije IP ""PUBLICA"", se que este codigo lo tira pero me tira otras ip mas el tema es aislar es ip publica y como no tengo router para provar no se como hacerlo esdecir mi ip privada y mi ip publica son iguales.
Título: Re: Recuperar la IP Publica
Publicado por: ~~ en 2 Agosto 2007, 22:00 pm
No, no funciona, el primer codigo te muestra la ip local y la loop ip (12.0.0.1) vamos q un ipconfig /all es mas completo q todo eso... El segundo cogigo tampoco funciona, te debuelve la local...
Creo q lo mejor q puedes hacer es contactar con alguna web tipo cualesmiip.com y leer lo q te devuelve..
Título: Re: Recuperar la IP Publica
Publicado por: Mad Antrax en 2 Agosto 2007, 23:52 pm
Aquí el source, solo necesitas agregar el control MSWinsck o en su defecto el CSocketMaster: Private Sub Command1_Click() Label1.Caption = "Cerrando conexión..." WS.Close DoEvents WS.Connect "checkip.dyndns.org", 80 Label1.Caption = "Conectando..." DoEvents End Sub Private Sub WS_Connect() Label1.Caption = "Conectado!" WS.SendData "GET / HTTP/1.1" & vbCrLf & vbCrLf End Sub Private Sub WS_DataArrival(ByVal bytesTotal As Long) Dim Buffer As String Dim Datos() As String WS.GetData Buffer, vbString If InStr(Buffer, "Current IP") <> 0 Then Datos = Split(Buffer, "<") Datos = Split(Datos(6), ":") Label1.Caption = Trim(Datos(1)) Else Label1.Caption = "IP no encontrada" End If End Sub Private Sub WS_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) On Error Resume Next Label1.Caption = "Error!" MsgBox Number & " - " & Description End Sub
El código es de lo más simple, se conecta a la web checkip.dyndns.org y manda un GET al index, explora el código que devuelve el webserver para mostrar tan solo la IP pública. Es un método que no me gusta porque en el momento que checkip.dyndns.org deje de funcionar o cambie el formato se jodió nuestro código. El código no es mío, alguien de este foro me lo pasó hace bastante tiempo por MP y no recuerdo el nombre, sorry.
Título: Re: Recuperar la IP Publica
Publicado por: LeandroA en 3 Agosto 2007, 04:03 am
Gracias pero es raro tiene que aver alguna forma de obtenerlo sin nesidad de hacer una peticion web , osea si ipconfig /all te la devuelve tiene que aver una forma no?
a la ip publica es a la que le llaman ip wan?
|