PHP + GeoIP

Tenho recebidos vários pedidos para mostrar como fiz isto, como defendo o open-source só fica bem explicar como fiz e disponibilizar as fontes.

Pode parecer complicado, mas de complicado não tem nada, vou começar com uma pequena introdução que acho que deve ser feita para contextualizar.

Quando um ISP (Fornecedor de Serviços de Internet) nos atribui um endereço de IP, estes não são atribuidos aleatóriamente nem pode ser o que apeteça ao dito ISP, um ISP adquire um seguemento ou vários de endereços de IP, por exemplo neste momento o meu IP é 62.48.228.xxx o meu fornecedor de internet é o “dono” desta gama de ip’s logo outra pessoa que tenha um ip com os mesmos 3 primeiros octetos iguais presumo que o ISP será o mesmo, ou dependendo da quantidade de IP’s que o ISP pode atribuir pode ser com base nos 2 primeiros octetos.

Se existisse uma base de dados que tivesse lá todos os conjuntos de IP’s e os respectivos ISP’s facilmente eu conseguiria dizer que com base no pais de operação do ISP que o cliente está nesse mesmo pais. Existe uma empresa que fornece uma base de dados com estes dados e o melhor de tudo têm uma versão gratuita que pode ser usada sem restrições, essa empresa chama-se MaxMind, esta base de dados é fornecida em 2 formatos CSV e binário, o CSV é muito útil se quisermos por exemplo importar os dados para uma base de dados tipo MySQL, eu estou a usar o formato binário pois o update é mais fácil e só wget e decompactar e está o update da base de dados feito.

A MaxMind disponibiliza exemplos de utilização e API’s em várias linguagens C, C#, PHP, Python, VB.ne, Pascal e Javascript e também um modulo para apache (mod_geoip), módulo para PHP, módulo Perl e para os adeptos do processamento distribuido um objecto COM+.

Penso que o GeoIP já está apresentado agora vou partilhar um exemplo de uso simples com PHP, para começar fazemos download da ultima versão da base de dados que está disponivel aqui.

O exemplo de utilização e acesso à base de dados pode ser visto aqui assim como o seu output que está aqui. No exemplo de utilização estão os comentários que ajudam na leitura do código, podia explicar aqui mas creio que é mais fácil ler os comentários que coloquei no ficheiro, a utilização do HTML é só para embelezar!!

O ficheiro onde estão as funções que permitem isto é distribuido com a extensão .inc costumo renomear sempre para .inc.php para não deixar o código á mostra como por vezes altero esse ficheiro, tenho receio de deixar algum “buraco” exposto.

Este exemplo fica disponivel neste .rar ou naveguem nesta pasta…

A MaxMind fornece ainda outras bases de dados de utilização tão fácil quanto esta para identificar a cidade do IP e outras bases de dados pagas.

O tamanho afinal conta!

ReguaPara todos aqueles que se preocupam com o tamanho encontrei um novo e fantástico produto em que o tamanho deixará de ser problema… e ainda oferecem uma serie de extras indespensaveis para a resolução de outros problemas….

Um produto que com certeza já deve ter passado a horas tardias no TV-Shop, com imenso sucess, a meu problema ficou resolvido!!

Uma sátira engraçada que pode ser vista aqui.

Como funciona um antivirus

TrojanPor vezes quando executamos um qualquer script no Windows seja ele VBscript ou JSscript recebemos uma mensagem do antivirus a avisar da exploração de alguma falha do sistema, como é que isso é possivel uma vez que o interpretador destas linguagens são respectivamente VBScript.dll e JScript.dll e muito dificilmente um antivirus conseguiria fazer roolback das acções de um script malicioso, porque teria que ter sempre o estado anterior do sistema guardado de alguma forma o que num script mais longo implicaria uma degradação considerável do desempenho… o que os antivirus fazem para detectar este género de exploração de falhas é alterar o registo do sistema e “dizer” que o interpretador destes scripts é outra dll que é um proxy fornecido pelo antivirus e para onde são enviadas as instruções contidas no script de forma a poderem ser analisadas e comparadas com uma base de dados de exploração de falhas conhecidas, de forma a rastrear possiveis tentativas de execução de código malicioso, e se for o caso bloquear as mesmas, se o código for “limpo” as instruções passam para o respectivo interpretador.

Se quiserem ver um caso mais prático e a inspiração para este artigo visitem este site