ethereal 过滤器使用经验

如同Tcpdump一样,Ethereal支持非常丰富的过滤器。过滤器分为两类,一类是抓包过滤器(capture filter),当网络流量很大时,可以非常有效地过滤噪音数据;另外一类是显示过滤器(display filter), 可以从你抓到的所有数据包中过滤噪音数据。事实上,由于好的过滤器需要非常好的网络知识,所以除非非常需要,一半可以不作过滤;我自己比较喜欢在抓取的时候不设过滤器,然后利用简单的display filter。建议初学者避免使用过滤器。顺便说一句,ethereal的capture filter和display filter语法不相同,capture filter的语法可以参照tcpdump的语法。

 

 

事实上,Ethereal本身并不能抓包,它只能用来解析数据包;要抓取数据包,它需要借助于PCap。Pcap在windows下面的实现称作Winpcap,现在最高的稳定版本是3.0。在Linux下面,Pcap一般都已经被默认安装;

 

 

常用的Capture Filter

 

 

常用的Display Filter

 

1. 操作符:

 

    eq, ==    Equal

 

    ne, !=    Not Equal

 

    gt, >     Greater Than

 

    lt, <     Less Than

 

    ge, >=    Greater than or Equal to

 

le, <=    Less than or Equal to

 

举例:

 

    Udp.port == 10002

 

sip.Method == INVITE

 

2. 搜索操作

 

    contains     协议,包,包含指定内容

 

matches      Perl标准表达式

 

举例:

 

    sip contains INVITE 这个将列出所有SIP包中含有INVITE字符的包;

 

wsp.user_agent matches "(?i)cldc" 查找wsp.user_agent中含有cldc字符的包,并且不区分大小写。(?option)这个表达式是PERL表达式,不是所有的ethereal版本都支持的,使用前检查自己的版本是否包含“with the PCRE library”;

3.常见关键词

 

frame

ip

 

eth

 

udp

 

tcp

 

http

 

举例:

 

frame .pkt_len > 100 包的数据长度大于100的包

ip.src == 192.168.214.12 源地址是192.168.214.12

ip.dst == www.yahoo.com 目标地址是www.yahoo.com的包

ip.addr == 129.111.0.0/16 地址范围在129.111.*.*子网的包,类似于capture filter的host

http.request.method == "HEAD" 在HTTP包中查找request命令含HEAD的包

http.request.method == "\x48EAD" 和上面的一样,只是使用\x48来表示‘H’

4. 数组操作

 

  [i:j]    i = 起点, j = 长度

  [i-j]    i = 起点, j = 末点, 包含.

  [i]      i = 起点, 长度1

  [:j]     起点等于 0, 长度= j

  [i:]     起点 = i, 至最后

还是直接举例吧:

eth.src[0:3] == 00:00:83  以太网地址的前3位

http.content_type[0:4] == "text"   content_type的前四位

frame[-4:4] == 0.1.2.3    起点为负表示终点-4 长度4位,就是末四位啦,怎么样够灵活吧~

5.逻辑操作

 

     and, &&   Logical AND

 

    or,  ||   Logical OR

 

not, !    Logical NOT

 

这个我就不多举例啦,应该都理解的J

 

6.位操作

 

bitwise_and, &      Bitwise AND

举例:

tcp.flags & 0x02           过滤所有的TCP SYN包

 

更多的关于filter的解释还是看帮助吧:ethereal-filter.html

 

至于Capture的Filter我就不多说啦,可以到linux下面去man tcpdumpJ

 

 

需要说明的是,Ethereal是基于图形界面的,所以如果你是通过SSH或者Telnet使用Unix工作站,你可能会感觉麻烦。而如果你打算使用Tcpdump,只要你打开一下tcpdump的手册页,你肯定就会望而却步了;更糟糕的是,Tcpdump的手册页只是提供了最基本的帮助。我常用的一个方法是,在远程终端运行tcpdump,加以最少的参数。比如: tcpdump -i eth0 -s 1500 -w a.dmp 这个语句机会可以在任何情况下使用。简单解释一下,-i eth0是在eth0接口上监听, -s 1500是一个很重要的参数,它指抓取的数据包的前1500个字节,否则你可能只能看到数据包的前68个字节,因为tcpdump的默认抓取长度是68, -w a.dmp是表示把抓取的数据写入a.dmp中。抓取介绍后,Ctl+C,你可以看到a.dmp已经生成。然后用sftp传到本机使用Ethereal解析。

你可能感兴趣的:(过滤器,使用经验,ethereal)