Jump to content
Fórum Script Brasil
  • 0

Ip Externo


Densyy

Question

Bom pessoal to com essa duvida á algum tempinho já

Preciso capturar o ip externo

exemplo : (201.xx.xxx.xx)

Mais preciso receber isso sem ter q usar componentes

como Inet , WebBrowser...

vi um tópico falando sobre uma dll que existe no windows q armazena o ip

Outra Duvida que tenho também é em relação ao Winsock1.Listen

Toda vez que uso o "Listen"

ele vai deixar o programa no estado de esculta

porém ele vai perguntar se você deseja deixar em estado de "Listen"

Somente para Local ou para Wan Também

Gostaria de Saber se é possivel definir para redes publicas tambem

Sem que essa pergunta seja feita ao programa

Se alguém poder me dar um help aqui

Ficarei muito grato

Edited by Densyy
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Bom pra quem tiver a primeira duvida aqui vai a resposta

No modulo você põe

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
'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 Function GetWanIP() As String
Dim Ret As Long, Tel As Long
Dim bBytes() As Byte
Dim TempList() As String
Dim TempIP As String
Dim Tempi As Long
Dim Listing As MIB_IPADDRTABLE
Dim L3 As String


On Error GoTo END1
    GetIpAddrTable ByVal 0&, Ret, True


    If Ret <= 0 Then Exit Function
    ReDim bBytes(0 To Ret - 1) As Byte
    ReDim TempList(0 To Ret - 1) As String
   
    '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
   
    For Tel = 0 To Listing.dEntrys - 1
        'Copy whole structure to Listing..
        CopyMemory Listing.mIPInfo(Tel), bBytes(4 + (Tel * Len(Listing.mIPInfo(0)))), Len(Listing.mIPInfo(Tel))
        TempList(Tel) = ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr)
    Next Tel
    'Sort Out The IP For WAN
        TempIP = TempList(0)
        For Tempi = 0 To Listing.dEntrys - 1
            L3 = Left(TempList(Tempi), 3)
            If L3 <> "169" And L3 <> "127" And L3 <> "192" Then
                TempIP = TempList(Tempi)
            End If
        Next Tempi
        GetWanIP = TempIP 'Return The TempIP


Exit Function
END1:
GetWanIP = ""
End Function
e no form
Private Sub Form_Load()
    MsgBox GetWanIP
End Sub

Agora só to com duvida no Winsock1.Listen ^^

Link to comment
Share on other sites

  • 0

Não entendi direito a dúvida... Só usei o Winsock para conexões locais, mas pelo que sei, funciona remotamente também. O problema é que se o seu computador está em uma rede, ele utiliza um IP que é único para toda esta rede, que também pode estar sendo utilizado por vários outros dispositivos.

Sendo assim, uma conexão remota tentando conectar no IP da rede onde está o seu computador vai cair no servidor ou no roteador q distribui a conexão nessa rede. Aí no caso, acho que cada dispositivo na rede deve ocupar uma porta para conexões remotas, ou então cada conexão de cada dispositivo ocupa uma porta diferente, realmente não sei ao certo, mas acho q isso era chamado de "port-forwarding", tente fazer uma pesquisa pelo termo relacionado a Winsock no VB6.

Agora no caso de você querer o contrário - restringir a conexão somente para a LAN, aí não sei se tem uma maneira melhor, mas você poderia analisar o IP que está conectando e verificar se ele faz parte da faixa de IPs locais (exemplo, se começar com "192.168.", você já sabe que é da rede local, então você libera).

Link to comment
Share on other sites

  • 0

Tipo minha duvida é a seguinte

Eu quero ultilizar o programa para redes Wan

quando eu abro ele pela primeira vez e deixo o programa em estado de esculta (Servidor)

Ai neste momente aparece um aviso do firewall dizendo se quero deixa em estado de esculta

somente para LAN ou para WAN tambem

porem eu n quero q esse aviso apareça e ele esteja em estado de esculta para Redes Wan tambem

Como algo anonimo

Intende?

Agradeço desde já

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...