On Wed, Feb 02, 2011 at 06:49:26PM +0100, Giovanni Bechis wrote: > This diff adds support to icmptype grammar to libpcap. > With this diff we can do: > $ sudo tcpdump -netttv -i nfe0 icmp[icmptype] = 8 > and capture only echo requests. > This diff is needed for an upcoming nmap update. > Comments ? ok ?
Looks good to me. Would be good to update the tcpdump manpage to show how these keywords are used. OK claudio@ > Cheers > Giovanni > Index: scanner.l > =================================================================== > RCS file: /cvs/src/lib/libpcap/scanner.l,v > retrieving revision 1.21 > diff -u -p -r1.21 scanner.l > --- scanner.l 27 Oct 2009 23:59:30 -0000 1.21 > +++ scanner.l 2 Feb 2011 17:39:32 -0000 > @@ -270,6 +270,30 @@ address4|addr4 return ADDR4; > #endif /*INET6*/ > } > {B}:+({B}:+)+ { bpf_error("bogus ethernet address %s", > yytext); } > +icmptype { yylval.i = 0; return NUM; } > +icmpcode { yylval.i = 1; return NUM; } > +icmp-echoreply { yylval.i = 0; return NUM; } > +icmp-unreach { yylval.i = 3; return NUM; } > +icmp-sourcequench { yylval.i = 4; return NUM; } > +icmp-redirect { yylval.i = 5; return NUM; } > +icmp-echo { yylval.i = 8; return NUM; } > +icmp-routeradvert { yylval.i = 9; return NUM; } > +icmp-routersolicit { yylval.i = 10; return NUM; } > +icmp-timxceed { yylval.i = 11; return NUM; } > +icmp-paramprob { yylval.i = 12; return NUM; } > +icmp-tstamp { yylval.i = 13; return NUM; } > +icmp-tstampreply { yylval.i = 14; return NUM; } > +icmp-ireq { yylval.i = 15; return NUM; } > +icmp-ireqreply { yylval.i = 16; return NUM; } > +icmp-maskreq { yylval.i = 17; return NUM; } > +icmp-maskreply { yylval.i = 18; return NUM; } > +tcpflags { yylval.i = 13; return NUM; } > +tcp-fin { yylval.i = 0x01; return NUM; } > +tcp-syn { yylval.i = 0x02; return NUM; } > +tcp-rst { yylval.i = 0x04; return NUM; } > +tcp-push { yylval.i = 0x08; return NUM; } > +tcp-ack { yylval.i = 0x10; return NUM; } > +tcp-urg { yylval.i = 0x20; return NUM; } > [A-Za-z0-9][-_.A-Za-z0-9]*[.A-Za-z0-9] { > yylval.s = sdup((char *)yytext); return ID; } > [A-Za-z] { yylval.s = sdup((char *)yytext); return ID; } > -- :wq Claudio