Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

определить страну по IP-адресу

254
11 сентября 2006 года
Cker
341 / / 20.08.2000
Товарищи, реально-ли определить страну по IP-адресу машины, с которой осуществляется загрузка моего сайта?
16K
11 сентября 2006 года
Бян
43 / / 05.09.2006
в unixоподобных системах есть команда whois.
ну и куча сервисов основанных на ней например: http://ipw.panarmenian.net/ip_whois/
387
11 сентября 2006 года
Ihbif19
421 / / 28.10.2004
[QUOTE=Cker]Товарищи, реально-ли определить страну по IP-адресу машины, с которой осуществляется загрузка моего сайта?[/QUOTE]
Определить реально!
8
11 сентября 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Cker]Товарищи, реально-ли определить страну по IP-адресу машины, с которой осуществляется загрузка моего сайта?[/QUOTE]
Вот тут вот лежат и периодически обновляются IP-адреса. Расписаны по странам. Примерно год назад я тут уже выкладывал класс для работы со всей этой бедой.

Код:
class IP
{
    private $DB;
    private $countryArray;

    const FILES_DIR         = "http://www.completewhois.com/statistics/data/ips-bycountry/rirstats/";
    const COUNTRYS_FILE     = "1ST-READ-THIS.txt";
    const SUFFIX_FILE       = "-netrange.txt";

    public function __construct(&$db){
        $this->DB = $db;
        $this->createTables();
    }

    public function readAllFiles(){
        foreach($this->getCountryCodes() as $row){
            $ipf = file(IP::FILES_DIR.$row.IP::SUFFIX_FILE);
            foreach($ipf as $str){
                preg_match_all("/(\d+\.\d+\.\d+\.\d+)\s+\-\s+(\d+\.\d+\.\d+\.\d+)/", $str, $arr, PREG_SET_ORDER);
                if(sizeof($arr)){
                    $this->replaceIPAddresses(ip2long($arr[0][1]), ip2long($arr[0][2]), $row);
                }
            }
        }
    }

    private function getCountryCodes(){
        return $this->DB->getCol("SELECT cc FROM ip_countrys", "cc");
    }

    private function replaceIPAddresses($addressFirst, $addressLast, $countryCode){
        $query = "REPLACE ip_addresses
                    SET
                      ip_first  =   '$addressFirst',
                       ip_last  =   '$addressLast',
                            cc  =   '$countryCode'"
;
        $this->DB->Query($query);
    }

    public function readFirst($file){
        $arr = file($file);
        foreach($arr as $row){
            preg_match_all("/(\d+\.\d+\.\d+\.\d+)\s+\-\s+([A-Za-z]+)\s+\-\s+(\w+)/", $row, $pstr, PREG_SET_ORDER);
            if(sizeof($pstr)){
                $this->replaceCountryCode($pstr[0]);
            }
        }
    }

    private function replaceCountryCode($arr){
        $query = "REPLACE ip_countrys
                    SET
                        cc  =   '{$arr[2]}',
                      name  =   '{$arr[3]}',
                     a_dns  =   '{$arr[1]}'
                        "
;
        $this->DB->Query($query);
    }
   
    private function createTables(){
        $sql = "
            CREATE TABLE IF NOT EXISTS `ip_addresses` (
              `ip_first` bigint(20) NOT NULL default '0',
              `ip_last` bigint(20) NOT NULL default '0',
              `cc` char(2) NOT NULL default '',
              KEY `ip_last` (`ip_last`),
              KEY `cc` (`cc`),
              KEY `ip_first` (`ip_first`)
            ) ENGINE=MyISAM DEFAULT CHARSET=utf8 "
;
        $this->DB->Query($query);    
           
        $sql ="
             CREATE TABLE IF NOT EXISTS `ip_countrys` (
              `cc` char(2) NOT NULL default '',
              `name` varchar(50) NOT NULL default '',
              `a_dns` varchar(15) NOT NULL default '',
              PRIMARY KEY  (`cc`)
            ) ENGINE=MyISAM DEFAULT CHARSET=utf8        
        "
;
        $this->DB->Query($query);
    }
}

$DBC = new DBUV();
$DBC->Connect();

$ip = new IP($DBC);
$ip->readFirst(FIRST_FILE);
$ip->readAllFiles();

foreach($DBC->Get_assoc_array("SELECT * FROM ip_addresses WHERE cc='BH' ORDER BY ip_first, ip_last") as $row){
    echo long2ip($row['ip_first'])." - ".long2ip($row['ip_last'])."<br>";
}


$DBC - класс, которым я пользуюсь для работы с MySQL. Названия его методов интеллектуально понятны, поэтому переделать труда не составит.
Ну а уж что со всем этим делать дальше - думаю объяснять не надо...
254
11 сентября 2006 года
Cker
341 / / 20.08.2000
Спасибо, буду пробовать
А что это за база?
10K
11 сентября 2006 года
KiLLMeNoT
61 / / 06.09.2006
MySQL
254
11 сентября 2006 года
Cker
341 / / 20.08.2000
Я имею ввиду базу IP-шников. Что это за ресурс? Он надежный?
8
11 сентября 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Cker]Я имею ввиду базу IP-шников. Что это за ресурс? Он надежный?[/QUOTE]
Сколько себя помню - существует и постоянно обновляется. Да и просто посмотри на адрес и на время файлов...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог