|
|
|
| В продолжение темы:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=24700&page=1
Наконец можно нормально определять IP.
Вот
При поддержке компании RU-CENTER стартовал новый проект
География российских IP-адресов IpGeoBase, разработанный
специалистами статистико-аналитического проекта Stat.nic.ru.
Цель проекта - создать общедоступный ресурс географической
привязки российских IP-адресов. Кроме того, создается общедоступная
бесплатная база данных такой географической привязки, которую мог
бы использовать для географического таргетинга любой вебмастер на
любом сайте как в Рунете, так и за его пределами.
|
А вот и ссылка на базу
http://ipgeobase.ru/cgi-bin/Software.cgi
http://ipgeo-base.ru/cgi-bin/Archive.cgi
P.S. Малоли кому пригодится. | |
|
|
|
|
|
|
|
для: hin
(06.06.2007 в 14:45)
| | - | |
|
|
|
|
|
|
|
для: hin
(06.06.2007 в 14:45)
| | Такой бы скриптик для этой же базы, да на php бы....
Может возьммся написать - НАРОД? | |
|
|
|
|
|
|
|
для: Proger
(06.06.2007 в 20:36)
| | Ну на первый взгляд - это просто текстовая бд с разделением полей \t и разделением записей \n.
как я понял IP преобразуется путём не сложных вычислений в цифровой вид. | |
|
|
|
|
|
|
|
для: Director_Of_Zoo
(07.06.2007 в 08:53)
| | я не знаком с Perl, но посмотрев тоже понял что он проверяет ай пи введённый по базе, но и ещё и в диапозоне, навпример ай пи 127.0.0.1 127.255.255.0 - это урупинкс ;)
Если бы знать хорошо Perl, то я бы сам бы сделал эту прогу, но к сожалению нема :( Люди давайте кооперироваться!!! | |
|
|
|
|
|
|
|
для: Proger
(07.06.2007 в 09:14)
| | Базу не смотрел, но думаю что вопрос решается одним sql запросом... над чем тут кооперироваться? | |
|
|
|
|
|
|
|
для: Loki
(07.06.2007 в 12:41)
| | База ФАЙЛОВАЯ, там 2 файлика!
А кооперировать над тем, что нужно скрипт в полной функциональности перевести с Perl на PHP =) | |
|
|
|
|
|
|
|
для: Proger
(07.06.2007 в 13:54)
| | И желательно базу занести MySQL или ещё лучше написать скрипт переводящий базу из файлов в MySQL. Как идея?? | |
|
|
|
|
|
|
|
для: hin
(07.06.2007 в 16:21)
| | Как идея??
Обалденная. | |
|
|
|
|
|
|
|
для: hin
(07.06.2007 в 16:21)
| | Впринципе верно, потому как скорость обработки таких больших файлов мала :( От 1 до 10 секунд будет если не более .... | |
|
|
|
|
|
|
|
для: hin
(07.06.2007 в 16:21)
| | вот вам задачка для раздела "задачи":) | |
|
|
|
|
|
|
|
для: Loki
(07.06.2007 в 18:13)
| | Такие базы существуют для мускула, правда платные, но нет ничего платного, что есть в интернете..
А также есть толковые зарубежные сервисы, с помощью кеоторых можно узнавать всю эту инфу, но базу они не предоставляют, можно только написать скриптик, чтобы через них эту инфу выбирать всякими "грабберами".. | |
|
|
|
|
|
|
|
для: mr Bin
(07.06.2007 в 19:33)
| | Вот вам база:
CREATE TABLE `ip_city` (
`city_id` int(11) NOT NULL auto_increment,
`city` varchar(255) NOT NULL,
`region_id` int(11) NOT NULL,
PRIMARY KEY (`city_id`),
UNIQUE KEY `city` (`city`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `ip_intervals` (
`interval_id` int(11) NOT NULL auto_increment,
`start` bigint(20) NOT NULL,
`end` bigint(20) NOT NULL,
`city_id` int(11) NOT NULL,
PRIMARY KEY (`interval_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `ip_okrug` (
`okrug_id` int(11) NOT NULL auto_increment,
`okrug` varchar(255) NOT NULL,
PRIMARY KEY (`okrug_id`),
UNIQUE KEY `okrug` (`okrug`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `ip_region` (
`region_id` int(11) NOT NULL auto_increment,
`region` varchar(255) NOT NULL,
`okrug_id` int(11) NOT NULL,
PRIMARY KEY (`region_id`),
UNIQUE KEY `region` (`region`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
вот вам парсер:
<?
include("config.php");
function sql($sql)
{
$result=mysql_query($sql);
if (!$result)
{
echo mysql_error();
echo "<br />".$sql;
exit;
}
return $result;
}
$fp=fopen("cidr_ru_master_index.db", "r");
while (($string = fgets($fp)) !== false ) {
preg_match('/(\d+)\t(\d+)\t[^\t]+\tRU\t([^\t]+)\t([^\t]+)\t([^\t]+)\t/', $string, $arr);
$result=sql("INSERT IGNORE INTO ip_okrug VALUES(NULL, '".mysql_escape_string($arr[5])."')");
if (!$okrug_id=mysql_insert_id())
{
$result=sql("SELECT okrug_id FROM ip_okrug WHERE okrug='".mysql_escape_string($arr[5])."'");
$okrug_id=mysql_result($result, 0);
}
$result=sql("INSERT IGNORE INTO ip_region VALUES(NULL, '".mysql_escape_string($arr[4])."', $okrug_id)");
if (!$region_id=mysql_insert_id())
{
$result=sql("SELECT region_id FROM ip_region WHERE region='".mysql_escape_string($arr[4])."'");
$region_id=mysql_result($result, 0);
}
$result=sql("INSERT IGNORE INTO ip_city VALUES(NULL, '".mysql_escape_string($arr[3])."', $region_id)");
if (!$city_id=mysql_insert_id())
{
$result=sql("SELECT city_id FROM ip_city WHERE city='".mysql_escape_string($arr[3])."'");
$city_id=mysql_result($result, 0);
}
sql("INSERT INTO ip_intervals VALUES(NULL, ".$arr[1].", ".$arr[2].", $city_id)");
}
echo "ok";
?>
|
Вот вам пример работы:
<?
include("config.php");
$ip="80.81.208.35";
$result=mysql_query("SELECT city, region, okrug FROM ip_intervals i
JOIN ip_city c ON i.city_id=c.city_id
JOIN ip_region r ON c.region_id=r.region_id
JOIN ip_okrug o ON r.okrug_id=o.okrug_id
WHERE INET_ATON('$ip') BETWEEN start AND end");
$data=mysql_fetch_assoc($result);
print_r($data);
?>
|
Теперь можете начинать кооперироваться. | |
|
|
|