Страница 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 перед циклом
обнулить.
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
у перла есть своя прелесть...
он мне не нравиться, но иногда писать на нём нравиться

причн объяснить не могу
