Prepoznavanje države na osnovu IP adrese

Teme vezane za profesionalni razvoj web stranica.
1 post • Stranica: 1/1.

Prepoznavanje države na osnovu IP adrese

PostPostao/la HepeK » 23 kol 2012, 15:48

Mnogi sajtovi tipa http://www.hostip.info/ griješe kada je riječ pronalaska države iz koje potiče IP adresa.

Korištenjem navedenog sajta i njihovog api-a kao rezultat prosleđivanja bosanske IP adrese dobijete Sloveniju, za IP adresu iz Srbije dobijete Hrvatsku itd...

Dakle, IP broj ili IP adresa je jedinstvena za svaki računar koji se spoji na internet. Po trenutnom IPv4 protokolu to je binarni broj dug 32 bita.

IP broj se najviše zapisuje u dekadskoj notaciji tj. u onoj notaciji koju mi razumijemo (XXX.XXX.XXX.XXX). - Odnosno jedan 32-bitni broj se podijeli na 4 8-bitna broja.

Dakle IP adresa je prikazana sa 4 8-bitna broja odvojena tačkom a svaki od ta tri broja je u rasponu 0-255 a upravo je 255 najveći broj koji se može zapisati pomoću 8-bita...

The Internet Assigned Numbers Authority (IANA) dodjeljuje određeni raspon IP adresa nekoj zemlji...

Svaku IP adresu je moguće zapisati u brojčanoj notaciji kao dugi cijeli broj (long integer) na sledeći način:

XXX.XXX.XXX.XXX
(prvioktet).(drugioktet).(trecioktet).(četvrtioktet)

U zagradama su predstavljeni okteti tj. prva tri broja su prvi oktet, druga tri broja su drugi oktet...itd

brojniZapisIP = (prvioktet)*256^3 + (drugioktet)*256^2 + (trecioktet)*256 + (četvrtioktet)

To je formula pomocu koje se iz IP adrese dobija dugi cijeli broj. Odredjeni raspon dugih cijelih brojeva je dodjeljen pojedinačnim dražvama a te raspone sam smjestio u sql bazu.

U prilogu se nalazi dump (.sql fajl) tabele sa rasponima dugih brojeva za IP adrese za pojedinačne države.

Dakle, prebacili smo sve u cijele brojeve jer je puno brže pretraživati brojeve nego stringove...prilikom importa sql fajla u bazu trebate čekati barem 2 sata :) zbog količine zapisa (preko 100 000)...

Prvo je potrebna funkcija koja vraća long integer a koja očekuje kao ulaz ip oblika XXX.XXX.XXX.XXX :

php code
function inet_aton($ip) {

$ip_array = explode(".", $ip);

return ($ip_array[0] * pow(256, 3)) + ($ip_array[1] * pow(256, 2)) + ($ip_array[2] * 256) + $ip_array[3];

}


A onda nam je potrebna funkcija koja će primiti kao ulazni parametar broj koji vrati funckija inet_aton

php code
function ip2country($ip){

$tablename = "ip2c";
$start = "start";
$end = "end";
$country = "country";

//$query = "SELECT country FROM ip2c WHERE " .$ip . ">=" . $db_ip_from_colname . " AND " . $this->_IPn . "<=" . $db_ip_to_colname;
$query = "SELECT " . $country . " FROM " . $tablename . " WHERE " . $ip . ">=" . $start . " AND " . $ip . "<=" . $end;
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result) or die(mysql_error());
return $row;
}


Funkcija ip2country() vraća ISO2 oznaku države. Tu ISO2 oznaku možete iskoristiti za prikaz zastave te države. Zastave svih država također se nalaze u prilogu.

"Ko nema u glavi ima na internetu"
Što čujem - poštujem, dok ne vidim - ne vjerujem.

1 post • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.