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

Ваш аккаунт

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

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

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

ip

436
25 января 2006 года
Fevzi
87 / / 02.04.2005
как программно определить диапазон ip адресов, принадлежащий конкретной стране?
8
25 января 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by Fevzi
как программно определить диапазон ip адресов, принадлежащий конкретной стране?


Бежишь, например, сюда , конвертируешь всё это в удобный для себя вид и пользуешься.
От себя добавлю, что наибольший интерес из всего этого представляет собой последний файл:
http://www.completewhois.com/statistics/data/ips-bycountry/rirstats/country_rirdata-dnsipl-all.txt

8
25 января 2006 года
mfender
3.5K / / 15.06.2005
Вот, даже нашинковал эти файлы в MySQL по-быстренькому.
15
25 января 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by mfender
Вот, даже нашинковал эти файлы в MySQL по-быстренькому.


Куль, пасиб. Хотел сам это сделать (файл валяеться), но руки всё не доходили.

8
26 января 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by shaelf
Куль, пасиб. Хотел сам это сделать (файл валяеться), но руки всё не доходили.


Могу класс подкинуть, сваянный на скорую руку.

Код:
class IPC
{
    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);
    }
}

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


Ну, что такое $DBC - надеюсь понятно. Варьируется взависимости от владельца :)
15
26 января 2006 года
shaelf
2.7K / / 04.05.2005
Спасибо. PHP5, а MySQL какой?
8
26 января 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by shaelf
Спасибо. PHP5, а MySQL какой?


MySQL - любой. У меня - 4.1.16

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог