ipfilter.dat в CIDR

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

ipfilter.dat в CIDR

Непрочитанное сообщение pimlab » 2010-05-11 10:40:40

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: ipfilter.dat в CIDR

Непрочитанное сообщение rmn » 2010-05-11 14:38:48

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

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

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

Re: ipfilter.dat в CIDR

Непрочитанное сообщение pimlab » 2010-05-11 15:42:52

говорю же из файла в файл

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

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
и тд

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: ipfilter.dat в CIDR

Непрочитанное сообщение rmn » 2010-05-11 17:03:29

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
Из файла сам прочитаешь?

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: ipfilter.dat в CIDR

Непрочитанное сообщение rmn » 2010-05-11 17:15:31

$netmask перед циклом

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

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

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

Re: ipfilter.dat в CIDR

Непрочитанное сообщение pimlab » 2010-05-11 17:44:55

Хммммм заманчиво :)
одно ,но в файле 326504 строки и я не знаю каким он будет завтра, через неделю.

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: ipfilter.dat в CIDR

Непрочитанное сообщение rmn » 2010-05-11 17:54:43

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

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

Re: ipfilter.dat в CIDR

Непрочитанное сообщение pimlab » 2010-05-11 17:55:05

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

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

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: ipfilter.dat в CIDR

Непрочитанное сообщение rmn » 2010-05-11 18:11:37

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);

?>

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

Re: ipfilter.dat в CIDR

Непрочитанное сообщение pimlab » 2010-05-11 18:30:43

СУПЕР !!!!!!!!!
пашет
ещё как перед именами добавить " # " ?

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

Re: ipfilter.dat в CIDR

Непрочитанное сообщение pimlab » 2010-05-11 18:41:27

Большое спасибо , сам разобрался ;)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ipfilter.dat в CIDR

Непрочитанное сообщение Alex Keda » 2010-05-11 23:23:45

на пыхе консольный скрипт...
куда народ катиться...
уж на что я перл не знаю, и то консольные на нём стругаю...
Убей их всех! Бог потом рассортирует...

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: ipfilter.dat в CIDR

Непрочитанное сообщение rmn » 2010-05-11 23:32:55

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: ipfilter.dat в CIDR

Непрочитанное сообщение Alex Keda » 2010-05-11 23:43:46

у перла есть своя прелесть...
он мне не нравиться, но иногда писать на нём нравиться =)
причн объяснить не могу =)
Убей их всех! Бог потом рассортирует...