VB6 - Resolvendo IP para países e para URL


Este pequeno programa feito em VB6 contém uma base de dados de faixa de IPs por países e se propõe a dado um IP identificar o país de origem. Com ele podemos também fornecer uma URL e obter o seu IP.

Vejamos as APIs do Windows usadas pelo programa:

1- Private Declare Function WSAStartup Lib "wsock32" (ByVal VersionReq As Long, WSADataReturn As WSADATA) As Long

A API WSAStartup  inicia o uso das DLLs de sockets para o WIndows por um processo retornando zero se a sua execução foi efetuada com sucesso.

2- Private Declare Function gethostbyaddr Lib "wsock32" (addr As Long, addrLen As Long, addrType As Long) As Long

A API gethostbyaddr retorna os dados do host correspondente ao seu endereço na rede.

3- Private Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

A API RtlMoveMemory copia um bloco de memória de um local para outro

4- Private Declare Function gethostbyname Lib "wsock32" (ByVal hostname As String) As Long

A API gethostbyname retorna a informação do host correspondente ao nome de um banco de dados de hosts.

5- Private Declare Function WSACleanup Lib "wsock32" () As Long

A API WSACleanup  termina o uso das DLLs de socket para Windows.

6- Private Declare Function WSAGetLastError Lib "wsock32" () As Long

A API WSAGetLastError  obtém o status do erro para a última operação que falhou.

Se você deseja informações detalhadas sobre APIs do Windows acesse o sítio: http://allapi.mentalis.org/

Quando o programa roda o evento Load do formulário principal da aplicação é disparado e a conexão com o banco de dados contendo os IPs por países é acessado , a rotina para preencher a combobox countryLst é chamada e o controle ListView IPDetail é preenchido exibindo a faixa de IPs para o país;

Private Sub Form_Load()
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\counter.mdb;Persist Security Info=False"
cn.Open
GetCountries
IPDetail.ColumnHeaders.Add , "IPfrom", "IP From", 3000
IPDetail.ColumnHeaders.Add , "IPto", "IP To", 3000
CountryLst.ListIndex = 0
End Sub

A rotina getCountries preenche a combobox countryLst usando o seguinte código:

Public Sub GetCountries()

Dim rs As New ADODB.Recordset
rs.Source = "Select Distinct(Country_Name) from Countries"
rs.ActiveConnection = cn

rs.Open
CountryLst.Clear

While Not rs.EOF
    CountryLst.AddItem rs.Fields("Country_Name")
    rs.MoveNext
Wend
End Sub

O IP é obtido pela chamada da rotina GetIP() que passa o pais como um parâmetro e recebe o IP:

Public Sub GetIP(Country As String)

Dim rs As New ADODB.Recordset

rs.ActiveConnection = cn
rs.Source = "Select *from Countries where Country_Name like '" & Country & "'"
rs.Open

IPDetail.ListItems.Clear

While Not rs.EOF
   IPDetail.ListItems.Add , , rs.Fields("IPFrom")
   IPDetail.ListItems((IPDetail.ListItems.Count - 1) + 1).ListSubItems.Add , , rs.Fields("IpTo")
   rs.MoveNext
Wend

End Sub

Como resultado da execução do programa podemos ter:

Pegue o projeto completo aqui: ipPais.zip

Simples, direto e objetivo. É Visual Basic...

Eu sei é apenas , VB , mas eu gosto...


José Carlos Macoratti