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

[ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 11:13:25
hizel
пока работает для табличек

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

>sudo python
Python 2.6.2 (r262:71600, Sep 14 2009, 11:40:55) 
[GCC 4.2.1 20070719  [FreeBSD]] on freebsd7
Type "help", "copyright", "credits" or "license" for more information.
>>> from ipfw import table_add, table_del, table_length, table_list
>>> table_length(35)
2
>>> table_list(35)
(('192.168.0.1', 32, 0), ('192.168.0.2', 32, 0))
>>> table_del(35,'192.168.0.1')
>>> table_list(35)
(('192.168.0.2', 32, 0),)
>>> table_add(35,'192.168.0.10')
>>> table_list(35)
(('192.168.0.2', 32, 0), ('192.168.0.10', 32, 0))
>>> quit()

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

>sudo ipfw table 35 list
192.168.0.2/32 0
192.168.0.10/32 0
perl биндинги не осилил :)

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 11:19:42
ProFTP
а чем он лучше будет?

вот этот типо http://search.cpan.org/~muir/BSD-Ipfwge ... pfwgen.pod ?

http://search.cpan.org/search?query=ipfw&mode=all

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

    #/usr/local/bin/perl -w

        use strict;
        use BSD::Ipfwgen;
        use IO::Handle;

        outside 'fxp0';
        leaf 'etha32';
        consolidate '209.66.121.128/25';
        us qw(
                140.174.82.0/24 
                207.33.232.0/22 
                207.33.184.0/22 
                207.33.240.0/21 
                209.157.64.0/19 
                140.174.154.0/24 
                207.33.66.0/24 
                209.66.121.0/24
            );
        not_us qw(
                209.66.121.0/29
        );
        symmetric qw(
                209.66.121.0/27
            );


        count_by_interface();
        count_by_tcp qw(80 119 21 53 25 871 513 23 6667);
        count_by_address qw();
        drop_unwanted qw(
                192.168.0.0:255.255.0.0
                172.16.0.0:255.240.0.0
                10.0.0.0:255.0.0.0
            );

        no_looping();
        no_spoofing_us();
        no_spoofing_by_us();
        no_leaf_spoofing();

        to_me_rules <<'';
                =deny udp from not 140.174.82.0/26 to any 111,2049 # portmap, NFS
                =deny tcp from not 140.174.82.0/26 to any 111 # portmap

        from_me_rules <<'';
                =deny udp from any 111,2049 to not 140.174.82.0/26 # portmap, NFS
                =deny tcp from any 111 to not 140.174.82.0/26 # portmap

        to_net_rules ('=host:mac84', <<'');
                =skiprule tcp from 140.174.82.32/27 to =host:mac84 6000 # mac84
                =deny tcp from any to =host:mac84 6000

        generate qw(INSECURE DEFAULT-ACCEPT); 

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 11:24:25
hizel
pfwgen generates commands that work with FreeBSD 2.2.5's firewall program: ipfw.
а моему биндингу не нужен ipfw узерлендовский, он напрямую работает

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

static PyObject *
ipfw_table_add(PyObject *self, PyObject *args)
{
    int table,mask=32,value=0;
    char *ip_str;
    int i,s=-1;
    ipfw_table_entry ent;

    if (!PyArg_ParseTuple(args,"is|ii",&table,&ip_str,&mask,&value))
        return NULL;
    // Table add entry
    if(table<MIN_TABLE){ 
        PyErr_SetString(IPFWError, "m..");
        return NULL;
    }

    ent.value = value;
    ent.tbl = table;
    ent.masklen = mask;
    if(!inet_aton(ip_str, (struct in_addr*)&ent.addr)){
        PyErr_SetString(IPFWError, "ip address bad");
        return NULL;
    }
    s=socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
    if(s<0){ 
        PyErr_SetString(IPFWError, "socket fail");
        return NULL;
    }
    i = setsockopt(s, IPPROTO_IP, IP_FW_TABLE_ADD, &ent, sizeof(ent));
    if(i && errno != EEXIST){ // Allow add existent entry
        PyErr_SetString(IPFWError, "setsocket fail");
        return NULL;
    }

    Py_INCREF(Py_None);
    return Py_None;
}
как та так

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 12:22:18
ProFTP
А где perl биндинг?

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 12:27:12
hizel
perl биндинги не осилил :pardon:

ты видел как пишутся перл биндинги, там разрыв мозга сразу! :(

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 12:40:12
ProFTP
я не знаю что такое билдинги

http://www.google.com.ua/#hl=uk&q=perl+ ... 9b7f7c4055
не нашел

я так понял это libc? Glib?
http://search.cpan.org/search?query=Glib&mode=all

ну в общем Си библиотеку можно перевеси в perl XS называется, он приведет в какой-то свой вид эту библиотеку и будет динамически ее использовать...

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 12:47:06
hizel
glibc для линупсоедов :evil:

кстати

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 12:50:12
hizel
пля я лох :(

http://docs.python.org/library/socket.h ... setsockopt
http://perldoc.perl.org/functions/setsockopt.html

можно было на чистом пистоне и перле написать :'(

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 12:51:52
ProFTP
обясни что такое биндинг?

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 12:55:05
hizel

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 13:11:44
hizel
вот теперь вопрос или мне трахаца с биндинговыми нашлепками только пистон или трахаца с упаковкой и распаковкой структур в строку ммм зато perl+python

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 13:53:32
ProFTP
показывай уже что там такое.... :smile:

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-24 23:46:37
hizel

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-25 6:46:53
ProFTP
ты Сишняк оказывается? :-D

а на perl или python можно это было сделать?

и вообще смысл, т.е. абсолютно под ругому хочшеь сделать ipfw? а ошибки в безопасности не сделаешь?
может лучше стандартный фаервол использовать?

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-25 10:48:30
hizel
можно написать, но придется трахацо с переводом структур в строку

мне например нужно добавить один ip в таблицу ipfw - это из пистона\перла запуск шела и из него запуск ipfw долго и ошибки фигово орабатываются, а через эту штуку открыть сокет и кинуть значение всё

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-25 10:58:59
ProFTP
это в pf делается быстро!

а в ipfw долго

как это запустить?

где-то написано как это настроить, как это написать? надо сищные исходники где-то посмотреть?
как мне наприсать на perl чтобы тоже быстро добавить в ipfw таблицу?

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-25 11:13:33
ProFTP
а предкомпеляция тут не поможет

http://search.cpan.org/~sisyphus/Inline-0.45/C/C.pod
http://search.cpan.org/search?query=inl ... C&mode=all

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

    use Inline C;
    greet('Ingy');
    greet(42);
    __END__
    __C__
    void greet(SV* sv_name) {
      printf("Hello %s!\n", SvPV(sv_name, PL_na));
    }

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-25 11:15:11
hizel
с чего это в pf это делается быстро? там такие же накладные расходы на запуск из перал\пистона\etc. pfctl

исходники все в /usr/src ;)

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-25 11:16:48
ProFTP
я имел ввиду, вроде бы, в pf в таблицу добавлять - быстрее будет...

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-25 11:18:49
hizel
хз, я исходники pfctl не смотрел, очень сомневаюсь что быстрее ipfw :D

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

s=socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
i = setsockopt(s, IPPROTO_IP, IP_FW_TABLE_ADD, &ent, sizeof(ent));
грубо говоря вся последовательность действий ;]

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-11-26 9:11:56
ProFTP
кстатети, кто знает есть ли решение, как вот это /usr/ports/multimedia/ffmpeg поставить куда нибудь на хостинг, чтобы можно было скопировать на хостинг и чтобы оно там работало?

на perl есть фишка, но она старая 2006 гоад и для lunux сборки, оно ругается на всё и не ставиться....
http://search.cpan.org/~allenday/FFmpeg-6036/FFmpeg.pm

Re: [ЧСВ]python биндинг для ipfw бацаю

Добавлено: 2009-12-13 22:12:42
ProFTP
hizel писал(а):можно написать, но придется трахацо с переводом структур в строку

мне например нужно добавить один ip в таблицу ipfw - это из пистона\перла запуск шела и из него запуск ipfw долго и ошибки фигово орабатываются, а через эту штуку открыть сокет и кинуть значение всё
я вот переписал статью http://www.lissyara.su/articles/freebsd ... pfw_table/

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

раз в 3 часа запускать скрипт - будет добавляться не более чем пару сек.