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