On Tue, Dec 11, 2007 at 03:02:56PM +0300, Peter Teslenko wrote: > Привет, коллеги. > > Кто владеет тайным знанием, для написания фильтров для flow-tools? > > Есть у меня пачка flows'ов хочу сделать из них выборку. > > Как? Уже весь мозг вывихнул. >
мне тоже не понравилось, как устроены фильтры в flow-tools, поэтому писал сам. ftp://swp.pp.ru/incoming/flowstat.tar.gz хочется чтобы программа на входе сама использовала базы flow-tools, а не парсила вывод от flow-print, но не соберусь разобраться как это делается. нет времени и главное вдохновения. :( пример использования: flow-cat /var/db/flows/asu/2007/2007-12 | flow-print |\ ./flowstat -f 'dst-ip { 82.179.19.64/26, 82.179.18.10 } ! src-ip { 82.179.16.0/20 }' \ 'proto' 'src-ip' 'dst-ip' src-ip:src-port' 'dst-ip:dst-port' \ 'src-ip:dst-port' 'dst-ip:src-port' параметр -f задает фильтр. все остальное - формы отчётов. все накапливается в памяти, поэтому при отчете по всем полям 'proto:src-ip:src-port:dst-ip:dst-port' памяти может потребоваться очень много. строятся отчёты путем агрегирования всех не указанных полей, указываются только значимые поля. в отчётах агрегированные поля будут заменены звёздочками. используется bison2. грамматика фильтров: 1 start: sp cond sp 2 cond: expr 3 | cond spaces expr 4 | cond sp '|' '|' sp expr 5 expr: 'p' 'r' 'o' 't' 'o' spaces protos 6 | 'i' 'p' spaces ipnets 7 | 's' 'r' 'c' '-' 'i' 'p' spaces ipnets 8 | 'd' 's' 't' '-' 'i' 'p' spaces ipnets 9 | 'p' 'o' 'r' 't' spaces ports 10 | 's' 'r' 'c' '-' 'p' 'o' 'r' 't' spaces ports 11 | 'd' 's' 't' '-' 'p' 'o' 'r' 't' spaces ports 12 | '!' sp expr 13 | '(' sp cond sp ')' 14 protos: proto 15 | '{' sp listprotos sp '}' 16 listprotos: proto 17 | listprotos sp ',' sp proto 18 proto: 'i' 'p' 19 | 'i' 'c' 'm' 'p' 20 | 't' 'c' 'p' 21 | 'u' 'd' 'p' 22 | 'i' 'p' 'e' 'n' 'c' 'a' 'p' 23 | 'g' 'r' 'e' 24 | '*' 25 | number 26 | '!' proto 27 ipnets: ipnet 28 | '{' sp listipnets sp '}' 29 listipnets: ipnet 30 | listipnets sp ',' sp ipnet 31 ipnet: ipaddr 32 | ipaddr '/' netbits 33 | ipaddr '/' netmask 34 | '*' 35 | '!' ipnet 36 ports: port 37 | '{' sp listports sp '}' 38 listports: port 39 | listports sp ',' sp port 40 port: number 41 | '*' 42 | '!' port 43 netbits: number 44 netmask: byte '.' byte '.' byte '.' byte 45 ipaddr: byte '.' byte '.' byte '.' byte 46 byte: number 47 number: DIGIT 48 | number DIGIT 49 sp: /* empty */ 50 | spaces 51 spaces: SP 52 | spaces SP > Критерий: > srcaddr не 192.168.1.0/24 > dstaddr 192.168.1.2, 192.168.1.5, 192.168.1.21 > > на выходе хочу увидеть суммарный объём по 3 хостам и раскладку по srcport > 80, 110, 143 > фильтр: !src-ip 192.168.1.0/24 dst-ip {192.168.1.2,192.168.1.5,192.168.1.21} dst-port {80,110,143} отчёты: dst-ip входящий по всем трем хостам dst-ip:dst-port входящий на все три хоста по портам src-ip входящий на них внешним адресам src-ip:dst-ip:dst-port входящий по внешним хостам на порты PS если написать Makefile для gnu make лень, на freebsd оно так собирается: bison2 -p ippf_yy -o ippf.c ippf.y cc -O -pipe -march=pentium3 -Iinclude -o flowstat ippf.c flow.c найдете ошибки - пишите. /swp -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

