Как перегнать IP в CIDR? - Форум успешных вебмастеров - GoFuckBiz.com - Страница 3
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB89.7026
BTC/USD69391.8925
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 12.02.2015, 02:08
Start Post: Как перегнать IP в CIDR? 
  #21
Maximus325
Технодаун
 
Регистрация: 11.05.2007
Сообщений: 10,384
Бабло: $1503235
По умолчанию

Например есть файл с 80к ипов.
Подскажите сркипт или сервис, который перегонит эти 80К в CIDR формат, везде где найдет возможность.
Спасибо
__________________
ноу криминалити ин раша
Maximus325 вне форума  
Старый 12.02.2015, 15:19   #22
SLYplix
Go Fucking Business
 
Регистрация: 18.05.2007
Сообщений: 114
Бабло: $26579
Отправить сообщение для SLYplix с помощью ICQ
По умолчанию

тоже сейчас над решением этой задачи =)

сразу надо список перегнать в ренжи, а потом уже в сидр.

https://stackoverflow.com/questions/...anges-with-php
SLYplix вне форума  
Старый 12.02.2015, 19:05   #23
x999xx
xx999x
 
Аватар для x999xx
 
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
По умолчанию

Цитата:
Сообщение от oxenus Посмотреть сообщение
Offtopic


Насчёт 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 ( )
x999xx вне форума  
Старый 12.02.2015, 21:03   #24
Maximus325
Технодаун
 
Регистрация: 11.05.2007
Сообщений: 10,384
Бабло: $1503235
ТС -->
автор темы ТС По умолчанию

Нет мне не только гугл нужен.
__________________
ноу криминалити ин раша
Maximus325 вне форума  
Старый 12.02.2015, 21:52   #25
masolit
Senior Member
 
Регистрация: 18.08.2007
Сообщений: 1,098
Бабло: $199375
По умолчанию

@Maximus325, давай помогу пиши мне что тебе надо достану все )
masolit вне форума  
Старый 12.02.2015, 21:55   #26
Maximus325
Технодаун
 
Регистрация: 11.05.2007
Сообщений: 10,384
Бабло: $1503235
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от masolit Посмотреть сообщение
@Maximus325, давай помогу пиши мне что тебе надо достану все )
Спаисбо, да мне механику бы понять просто. Я думал есть какое то простое готовое решение просто.
__________________
ноу криминалити ин раша
Maximus325 вне форума  
Старый 12.02.2015, 21:56   #27
x999xx
xx999x
 
Аватар для x999xx
 
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
По умолчанию

Цитата:
Сообщение от masolit Посмотреть сообщение
@Maximus325, давай помогу пиши мне что тебе надо достану все )
вот тут

бро, за 10 wmz скажи пожалуйста, в чем я не прав?
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
x999xx вне форума  
Старый 12.02.2015, 22:28   #28
masolit
Senior Member
 
Регистрация: 18.08.2007
Сообщений: 1,098
Бабло: $199375
По умолчанию

Цитата:
Сообщение от x999xx Посмотреть сообщение
вот тут

бро, за 10 wmz скажи пожалуйста, в чем я не прав?
10 wmz оставь себе ))
я не знаю почему ты подумал что ты не прав ), если честно даже не смотрел что ты написал там
masolit вне форума  
Старый 12.02.2015, 22:34   #29
x999xx
xx999x
 
Аватар для x999xx
 
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
По умолчанию

ах ты хитрый лис
да я про это мануал прочитал и понял что половина тут не шарит вообще о чем речь
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
x999xx вне форума  
Старый 13.02.2015, 01:52   #30
oxenus
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(232 $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
oxenus вне форума  
Старый 13.02.2015, 04:23   #31
Cook
Юниор
 
Аватар для Cook
 
Регистрация: 16.01.2015
Сообщений: 18
Бабло: $7369
По умолчанию

питон
есть пакет netaddr
кроме простого перевода сетей в разные форматы умеет обьединять все в сети, и на выходе можно получить cidrы
Cook вне форума