Страница 1 из 1

ipfilter.dat в CIDR

Добавлено: 2010-05-11 10:40:40
pimlab
Есть ли в BSD конвертер чтобы перекодить ип адреса
192.168.0.1-192.168.0.255 > 192.168.0.0/24 и тд
причем из файла в файл.
хочу pf'ом зарубить их всеx

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 14:38:48
rmn

Код: Выделить всё

remcomp% ipcalc -nb 192.168.0.1 | grep Network | awk '{print $2}'
192.168.0.0/24

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 15:42:52
pimlab
говорю же из файла в файл

Код: Выделить всё

cat ipfilter.dat
000.000.000.000 - 000.255.255.255 , 000 , Bogon
001.000.001.000 - 001.000.001.255 , 000 , Bogon
001.000.002.000 - 001.000.003.255 , 000 , Bogon
001.000.004.000 - 001.000.007.255 , 000 , Bogon
001.000.008.000 - 001.000.015.255 , 000 , Bogon
001.000.016.000 - 001.000.031.255 , 000 , Bogon
001.000.032.000 - 001.000.063.255 , 000 , Bogon
001.000.064.000 - 001.000.127.255 , 000 , Bogon
001.000.128.000 - 001.000.255.255 , 000 , Bogon
001.001.000.000 - 001.001.000.255 , 000 , Bogon
001.001.002.000 - 001.001.003.255 , 000 , Bogon
001.001.004.000 - 001.001.007.255 , 000 , Bogon
001.001.008.000 - 001.001.015.255 , 000 , Bogon
001.001.016.000 - 001.001.031.255 , 000 , Bogon
001.001.032.000 - 001.001.063.255 , 000 , Bogon
001.001.064.000 - 001.001.127.255 , 000 , Bogon
001.001.128.000 - 001.001.255.255 , 000 , Bogon
001.002.000.000 - 001.002.001.255 , 000 , Bogon
001.002.002.000 - 001.002.002.255 , 000 , Bogon
001.002.004.000 - 001.002.007.255 , 000 , Bogon
001.002.008.000 - 001.002.015.255 , 000 , Bogon
001.002.016.000 - 001.002.031.255 , 000 , Bogon
001.002.032.000 - 001.002.063.255 , 000 , Bogon
001.002.064.000 - 001.002.127.255 , 000 , Bogon
и тд

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 17:03:29
rmn
test.php:

Код: Выделить всё

#!/usr/local/bin/php 
<?php

$line[0] = "000.000.000.000 - 000.255.255.255 , 000 , Bogon";
$line[1] = "001.000.001.000 - 001.000.001.255 , 000 , Bogon";
$line[2] = "001.000.002.000 - 001.000.003.255 , 000 , Bogon";
$line[3] = "001.000.004.000 - 001.000.007.255 , 000 , Bogon";
$line[4] = "001.000.008.000 - 001.000.015.255 , 000 , Bogon";
$line[5] = "001.000.016.000 - 001.000.031.255 , 000 , Bogon";
$line[6] = "001.000.032.000 - 001.000.063.255 , 000 , Bogon";
$line[7] = "001.000.064.000 - 001.000.127.255 , 000 , Bogon";
$line[8] = "001.000.128.000 - 001.000.255.255 , 000 , Bogon";

foreach ($line as $l)
{
    $values = explode(' ', $l);
    $val1 = explode('.', $values[0]);
    $val2 = explode('.', $values[2]);

    $ip1 = ($val1[0] << 24) | ($val1[1] << 16) | ($val1[2] << 8) | $val1[3];
    $ip2 = ($val2[0] << 24) | ($val2[1] << 16) | ($val2[2] << 8) | $val2[3];

    $host_count = $ip2 - $ip1;
    $bits = 32 - ceil(log($host_count, 2));

    $c = $bits;
    while($c--)
    {
        $netmask >>= 1;
        $netmask |= 0x80000000;
    }

    echo long2ip(($ip1 & $netmask)) . "/" . $bits . "\n";
}

?>

Код: Выделить всё

remcomp% ./test.php
0.0.0.0/8
1.0.1.0/24
1.0.2.0/23
1.0.4.0/22
1.0.8.0/21
1.0.16.0/20
1.0.32.0/19
1.0.64.0/18
1.0.128.0/17
Из файла сам прочитаешь?

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 17:15:31
rmn
$netmask перед циклом

Код: Выделить всё

while($c--)
обнулить.

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 17:44:55
pimlab
Хммммм заманчиво :)
одно ,но в файле 326504 строки и я не знаю каким он будет завтра, через неделю.

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 17:54:43
rmn
pimlab писал(а):одно ,но в файле 326504 строки и я не знаю каким он будет завтра, через неделю.
а какая разница? ты же не будешь их в массив загонять. Это просто у меня так, для теста.
Читай из файла через fgets или file_get_contents

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 17:55:05
pimlab
тут филтер лежит
http://upd.emule-security.net/ipfilter.zip
сразу в нужном мне формате я не нашёл в нете, а хочу автоматизировать эту фичу.

пс. если бы я был в теме , то явно не писал бы сюда

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 18:11:37
rmn
http://rapidshare.com/files/386081683/g ... ar.gz.html

подправленный скрипт:

Код: Выделить всё

#!/usr/local/bin/php 
<?php

$f = fopen("/data/downloads/guarding.p2p", "r");

while($l = fgets($f))
{
    $values = explode(' ', $l, 7);
    $val1 = explode('.', $values[0]);
    $val2 = explode('.', $values[2]);

    $ip1 = ($val1[0] << 24) | ($val1[1] << 16) | ($val1[2] << 8) | $val1[3];
    $ip2 = ($val2[0] << 24) | ($val2[1] << 16) | ($val2[2] << 8) | $val2[3];

    $host_count = $ip2 - $ip1;
    $bits = min(32 - ceil(log($host_count, 2)), 32);

    $c = $bits;
    $netmask = 0;
    while($c--)
    {
        $netmask >>= 1;
        $netmask |= 0x80000000;
    }

    echo long2ip(($ip1 & $netmask)) . "/" . $bits . "\t" . $values[6];
}

fclose($f);

?>

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 18:30:43
pimlab
СУПЕР !!!!!!!!!
пашет
ещё как перед именами добавить " # " ?

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 18:41:27
pimlab
Большое спасибо , сам разобрался ;)

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 23:23:45
Alex Keda
на пыхе консольный скрипт...
куда народ катиться...
уж на что я перл не знаю, и то консольные на нём стругаю...

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 23:32:55
rmn
Alex Keda писал(а):на пыхе консольный скрипт...
куда народ катиться...
уж на что я перл не знаю, и то консольные на нём стругаю...
php больше на C похож. Пишется легко и читается приятно.
Не то, что этот бляцкий перл :)

Re: ipfilter.dat в CIDR

Добавлено: 2010-05-11 23:43:46
Alex Keda
у перла есть своя прелесть...
он мне не нравиться, но иногда писать на нём нравиться =)
причн объяснить не могу =)