ipfw table - как можно быстро заполнить таблицы из файла

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение Alex Keda » 2010-04-09 9:13:49

сабж.
стандартный метод типа

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

${FwCMD} table $port add $ip
получается весьма медленный и ресурсоёмкий
файлы с таблицами большие

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

srv2# wc -l /root/scripts/db/table.*
   20113 /root/scripts/db/table.25.txt
    7186 /root/scripts/db/table.80.txt
   27299 total
srv2#     
а каждый адресок - это форк...

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

srv2# time /root/scripts/ipfw/ipfw.sh
14.104u 62.454s 2:10.61 58.6%   112+582k 7+0io 0pf+0w
srv2#    
Убей их всех! Бог потом рассортирует...

Хостинговая компания 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/

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

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение Alex Keda » 2010-04-09 9:25:24

http://forums.freebsd.org/archive/index.php/t-5896.html
судя по всему невозможно =(
Убей их всех! Бог потом рассортирует...

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение hizel » 2010-04-09 9:49:22

стой автолюбитель!
тебе на каком языке сделать?
C(Си) скомпилируешь?
удалять и смотреть надо?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

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

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение Alex Keda » 2010-04-09 9:54:50

меня больше интересует возможность реализовать это штатно...
как патч к ipfw(8) - чтоб закоммитили и не таскать с собой пачку патчей
Убей их всех! Бог потом рассортирует...

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

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение Alex Keda » 2010-04-09 9:59:12

пульнул заодно в рассылку.
http://lists.freebsd.org/pipermail/free ... 16487.html
Убей их всех! Бог потом рассортирует...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение ProFTP » 2010-04-09 10:06:26

как часто тебе нужно добавлять этот список в таблицу?

ты можешь один раз добавить, а в последующие разы сравнивать ip которые в таблице, и те которые в новом списке, и добавлять только новые... новых как правило около 100 айпи в час, т.е. очень быстро... и не надо существующие по новому добавлять...

.. тебе надо добавить этот айпи в raw socket на python perl, hizel это писал ...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение hizel » 2010-04-09 10:11:03

а вот так?

файл вида:

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

table 25 add 192.168.0.32
table 25 add 192.168.0.33
table 25 add 192.168.0.34
table 25 add 192.168.0.35
table 25 add 192.168.0.36

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

se@serv4 ~ >wc -l ip2.txt 
   65536 ip2.txt
se@serv4 ~ >sudo ipfw table 25 flush
se@serv4 ~ >sudo time ipfw /home/se/ip2.txt
        0.94 real         0.54 user         0.39 sys
se@serv4 ~ >sudo ipfw table 25 list | wc -l
   65536
не айс? все из коробки, просто файлики немного по другому писать
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

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

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение Alex Keda » 2010-04-09 10:13:22

вариант.
файлики переписать не проблема - хоть на ходу через временные - благо в sh(1) echo - функция встроенная и будет быстро =))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение hizel » 2010-04-09 10:20:21

ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname

лучше preproc написать для предобработки :)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение hizel » 2010-04-09 11:17:38

поражаюсь когда в рассылке кто-то отвечает ^_^
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение ProFTP » 2010-04-09 12:37:30

hizel писал(а):поражаюсь когда в рассылке кто-то отвечает ^_^
а ты же эти сиськи писал...

через perl, python оно будет быстрее

http://ss.lg.ua/node/591

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

#!/usr/local/bin/perl

use Socket;
use constant IPPROTO_RAW => 255;

$iaddr = inet_aton ('192.168.139.1');
$paddr = sockaddr_in (80, $iaddr); #80 - порт назначения

socket(SOCKET, PF_INET, SOCK_RAW, IPPROTO_RAW) or die "Can't open raw socket: $!\n";

$packet = undef;
$packet .= pack("C", 69);
$packet .= pack ("H2", '00');
$packet .= pack ("n", 28);
$packet .= pack ("n", 0);
$packet .= pack ("H4", '4000');
$packet .= pack ("C", 64);
$packet .= pack ("C", getprotobyname('udp'));
$packet .= pack ("n", 0);

$source_ip = '207.46.197.32';
$result_source_ip = undef;
for (split('\.', $source_ip)){   #разбиваем по точкам
	$result_source_ip .= pack ("C", $_)
}
$packet .= $result_source_ip;

$destination_ip = '192.168.139.1';
$result_destination_ip = undef;
for (split('\.', $destination_ip)){   #разбиваем по точкам
	$result_destination_ip .= pack ("C", $_)
}
$packet .= $result_destination_ip;

$packet .= pack ("n", 25); #порт источника
$packet .= pack ("n", 80); #порт назначения
$packet .= pack ("n", 8);
$packet .= pack ("H4", '0000');

while(){
	send(SOCKET, $packet, 0, $paddr) or die "Can't send packet: $!\n";
	sleep 1;  #поспим некоторое время, чтобы не сильно DoS'ить сеть.
}
тут нужно как-то поменять и отправить таблицу и ip

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

      s=socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

	

47

	

    if(s<0){ 

	

48

	

        PyErr_SetString(IPFWError, "socket fail");

	

49

	

        return NULL;

	

50

	

    }

	

51

	

    i = setsockopt(s, IPPROTO_IP, IP_FW_TABLE_ADD, &ent, sizeof(ent));

	

52

	

    if(i && errno != EEXIST){ // Allow add existent entry

	

53

	

        PyErr_SetString(IPFWError, "setsocket fail");

	

54

	

        close(s);

	

55

	

        return NULL;

	

56

	

    }

	

57

	

    close(s);
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение hizel » 2010-04-09 12:54:39

в данном случае это избыточное решение, Лис-у нужно из коропки и он его(решение) получил
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение ProFTP » 2010-04-09 13:01:33

hizel писал(а):в данном случае это избыточное решение, Лис-у нужно из коропки и он его(решение) получил
избычтоное - так избыточное, хрен с ним...

а этот скрипт на perl быстрее будет на много чем добавлять через ipfw?

может написать?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение hizel » 2010-04-09 13:32:50

пиши, чо, разрешаю : )
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: ipfw table - как можно быстро заполнить таблицы из файла

Непрочитанное сообщение ProFTP » 2010-04-09 13:35:53

я написал

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

#!/usr/local/bin/perl

use Socket;
use constant IPPROTO_RAW => 255;


socket( SOCKET,AF_INET, SOCK_RAW, IPPROTO_RAW ) or die "Can't open raw socket: $!\n";


setsockopt(SOCKET, IPPROTO_IP, IP_FW_TABLE_ADD, '22') or die "Can't send packet: $!\n";
./perl2.pl
Can't send packet: Protocol not available




а что такое, вот это &ent, sizeof(ent)); ?
с

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

   i = setsockopt(s, IPPROTO_IP, IP_FW_TABLE_ADD, &ent, sizeof(ent));
use Socket; экспортирует существующие сишные функции /usr/include/linux/socket.h
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение