|
| Дата |
|
USD/RUB | 89.7026 | BTC/USD | 69391.8925 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
12.02.2015, 02:08
|
Start Post: Как перегнать IP в CIDR?
|
Технодаун
Регистрация: 11.05.2007
Сообщений: 10,384
Бабло: $1503235
|
Например есть файл с 80к ипов.
Подскажите сркипт или сервис, который перегонит эти 80К в CIDR формат, везде где найдет возможность.
Спасибо
__________________
ноу криминалити ин раша
|
|
|
12.02.2015, 19:05
|
#23
|
xx999x
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
|
Цитата:
Сообщение от oxenus
Только мне кажется, что x999xx не совсем адекват?
Насчёт cidr-ов, мне кажется легче всего, будет сперва отсортировать адреса в файле. и потом пхп скриптом составить рэнджи.
к примеру
получится на выходе что-то типа
10.1.1.0-10.1.1.1
10.1.1.3-10.1.1.3
10.1.1.10-10.1.1.123
Потом составить из каждого рэнджа их подсетки - уже чуть легче.
Но опять же, есть нюансы по этому поводу.
к примеру
Range 10.1.1.10-10.1.1.123 будет выглядить как набор CIDR:
10.1.1.10/31
10.1.1.12/30
10.1.1.16/28
10.1.1.32/27
10.1.1.64/27
10.1.1.96/28
10.1.1.112/29
10.1.1.120/30
в инете полно range to cidr решений.
|
тебя сk ток
Цитата:
- Запрещено оскорбление участников форума: не нужно переходить на личности в негативном контексте во время обсуждения той или иной темы.
-
|
спасло
скорее всего вопрос некорректно был задан, я чет сразу не подумал, что чувак гугловские ипы парсит на предмет подсетей, чтобы себе в клоаку 80к строк не грузить
бля да хуле глобальная база не нужна?
вот например ип гугл бота 191.181.191.14
второй бот 191.181.197.19
пробиваем на том сайте что выше, выясняем что подсеть вида 191.181.0.0/5
и не понятно че вякать ваще против этого
или вы интернет на дискеты раньше сохраняли?
ok ip range2cidr
Код:
function ip2cidr($ip_start,$ip_end) {
if(long2ip(ip2long($ip_start))!=$ip_start or long2ip(ip2long($ip_end))!=$ip_end) return NULL;
$ipl_start=(int)ip2long($ip_start);
$ipl_end=(int)ip2long($ip_end);
if($ipl_start>0 && $ipl_end<0) $delta=($ipl_end+4294967296)-$ipl_start;
else $delta=$ipl_end-$ipl_start;
$netmask=str_pad(decbin($delta),32,"0","STR_PAD_LEFT");
if(ip2long($ip_start)==0 && substr_count($netmask,"1")==32) return "0.0.0.0/0";
if($delta<0 or ($delta>0 && $delta%2==0)) return NULL;
for($mask=0;$mask<32;$mask++) if($netmask[$mask]==1) break;
if(substr_count($netmask,"0")!=$mask) return NULL;
return "$ip_start/$mask";
}
и еще плиз
Цитата:
получится на выходе что-то типа
10.1.1.0-10.1.1.1
10.1.1.3-10.1.1.3
10.1.1.10-10.1.1.123
|
схуяли у тебя вдруг последняя строчка такая?
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
|
|
|
12.02.2015, 21:03
|
#24
|
Технодаун
Регистрация: 11.05.2007
Сообщений: 10,384
Бабло: $1503235
ТС -->
|
ТС
Нет мне не только гугл нужен.
__________________
ноу криминалити ин раша
|
|
|
12.02.2015, 21:52
|
#25
|
Senior Member
Регистрация: 18.08.2007
Сообщений: 1,098
Бабло: $199375
|
@Maximus325, давай помогу пиши мне что тебе надо достану все )
|
|
|
12.02.2015, 21:55
|
#26
|
Технодаун
Регистрация: 11.05.2007
Сообщений: 10,384
Бабло: $1503235
ТС -->
|
ТС
Цитата:
Сообщение от masolit
@Maximus325, давай помогу пиши мне что тебе надо достану все )
|
Спаисбо, да мне механику бы понять просто. Я думал есть какое то простое готовое решение просто.
__________________
ноу криминалити ин раша
|
|
|
12.02.2015, 21:56
|
#27
|
xx999x
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
|
Цитата:
Сообщение от masolit
@Maximus325, давай помогу пиши мне что тебе надо достану все )
|
вот тут
бро, за 10 wmz скажи пожалуйста, в чем я не прав?
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
|
|
|
12.02.2015, 22:28
|
#28
|
Senior Member
Регистрация: 18.08.2007
Сообщений: 1,098
Бабло: $199375
|
Цитата:
Сообщение от x999xx
вот тут
бро, за 10 wmz скажи пожалуйста, в чем я не прав?
|
10 wmz оставь себе ))
я не знаю почему ты подумал что ты не прав ), если честно даже не смотрел что ты написал там
|
|
|
12.02.2015, 22:34
|
#29
|
xx999x
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
|
ах ты хитрый лис
да я про это мануал прочитал и понял что половина тут не шарит вообще о чем речь
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
|
|
|
13.02.2015, 01:52
|
#30
|
Senior Member
Регистрация: 03.08.2007
Сообщений: 167
Бабло: $23060
|
script
накидал простой скрипт.
возможны баги. не особо тестировал
PHP код:
$fout=fopen("outcidrs.txt","w");
function cidr2ip($cidr)
{
$ip_arr = explode('/', $cidr);
$start = ip2long($ip_arr[0]);
$nm = $ip_arr[1];
$num = pow(2, 32 - $nm);
$end = $start + $num - 1;
return array($ip_arr[0], long2ip($end));
}
function ip2cidr($ips)
{
$return = array();
$num = ip2long($ips[1]) - ip2long($ips[0]) + 1;
$bin = decbin($num);
$chunk = str_split($bin);
$chunk = array_reverse($chunk);
$start = 0;
while ($start < count($chunk))
{
if ($chunk[$start] != 0)
{
$start_ip = isset($range) ? long2ip(ip2long($range[1]) + 1) : $ips[0];
$range = cidr2ip($start_ip . '/' . (32 - $start));
$return[] = $start_ip . '/' . (32 - $start);
}
$start++;
}
return $return;
}
function convert_range($start,$last){
global $fout;
$s=long2ip($start);
$e=long2ip($last);
echo "Converting range $s-$e\n";
$args=array($s,$e);
foreach(ip2cidr($args) as $cidr){
fwrite($fout,$cidr."\n");
}
}
$xips=file("ips.txt",FILE_IGNORE_NEW_LINES |FILE_SKIP_EMPTY_LINES);
$ips=array();
foreach($xips as $ip){
$ipl=sprintf("%u", ip2long($ip));
$ips[]=$ipl;
}
$ips=array_unique($ips);
sort($ips);
$start=-1;
$last=-1;
foreach($ips as $ip){
if ($start==-1){
$start=$ip;
$last=$ip;
// first ip
continue;
}
if (($ip-$last)==1){
//continue range...
// next ip...+1
$last=$ip;
continue;
}
// range ended.. $start-$last.
convert_range($start,$last);
$start=$ip;
$last=$ip;
// starting new range.
}
//last call
convert_range($start,$last);
fclose($fout);
пример входящих данных ips.txt:
Код:
10.1.1.1
10.1.1.21
10.1.1.15
10.1.1.16
10.1.1.18
10.1.1.22
10.2.1.22
10.2.1.23
10.1.1.19
10.1.1.2
10.1.1.3
10.1.1.10
10.1.1.11
10.1.1.20
Выходящий файл: outcidrs.txt
Код:
10.1.1.1/32
10.1.1.2/31
10.1.1.10/31
10.1.1.15/31
10.1.1.18/32
10.1.1.19/30
10.2.1.22/31
|
|
|
13.02.2015, 04:23
|
#31
|
Юниор
Регистрация: 16.01.2015
Сообщений: 18
Бабло: $7369
|
питон
есть пакет netaddr
кроме простого перевода сетей в разные форматы умеет обьединять все в сети, и на выходе можно получить cidrы
|
|
|
|