wireshark过滤分析
什么是Wireshark
Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据包,并为用户提供关于网络和上层协议的各种信息,并尝试显示包尽可能详细的情况。与很多其他网络工具一样,Wireshark 也使用pcap network library来进行封包捕捉。Wireshark可能算得上是今天能使用的最好的开源网络分析软件。
Wireshark的前身叫做Ethereal(因为商标问题而改名),是开放源代码软件,我们可以免费从官方网站(http://wireshark.org)下载使用。Wireshark支持多种操作系统,在windows,UNIX,MAC等系统都有相应的版本。通过此软件,我们可以抓取网络数据包,分析数据包的内容,一般常用在网络故障排除、软件封包检测。在使用上,Wireshark提供的图形界面,非常直观,而且相当容易上手,以及支持丰富的过滤语言,可以灵活捕获我们需要的数据包,是一个非常有用的软件。
下面是Wireshark一些应用的举例:
-
网络管理员用来解决网络问题
-
网络安全工程师用来检测安全隐患
-
开发人员用来测试协议执行情况
-
用来学习网络协议
认识Wireshark界面
如果捕获的是一个OSI layer 2的封包,您在Source(来源)和Destination(目的地)列中看到的将是MAC地址,此时Port(端口)列将会为空。
如果捕获的是一个OSI layer 3或者更高层的封包,Source(来源)和Destination(目的地)列中看到的将是IP地址。Port(端口)列仅会在这个封包属于第4或者更高层时才会显示。
封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。可以看到每一种协议都会以不同的颜色表示。
Wireshark详细信息的层与对应OSI七层模型
选择抓包网卡
Wireshark过滤器
过滤器会可以帮助我们只抓捕关注的信息或在在庞杂的抓捕结果中过滤出目标信息。
捕捉过滤器(CaptureFilters):捕捉过滤器在抓抱前进行设置,决定抓取怎样的数据;
显示过滤器(DisplayFilters):用于在捕捉结果中进行过滤,方便stream的追踪和排查。
按照过滤的语法可分为协议过滤和内容过滤。捕捉过滤器仅支持协议过滤,显示过滤器既支持协议过滤也支持内容过滤。两种过滤器支持的过滤语法并不一样。
如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。
过滤器支持比较运算符、逻辑运算符,内容过滤时还能使用位运算。
对标准协议,既支持粗粒度的过滤如HTTP,也支持细粒度的、依据协议属性值进行的过滤如tcp.port==53、http.request.method=="GET"。
对内容的过滤,既支持深度的字符串匹配过滤如http contains "Server",也支持特定偏移处值的匹配过滤如tcp[20:3] == 47:45:54。
捕捉过滤器--捕捉前依据协议的相关信息进行过滤设置
字段详解:
// 显示目的TCP端口为3128的包
tcp dst port 3128
// 显示来源IP地址为10.1.1.1的封包
ip src host 10.1.1.1
// 显示来源为UDP或TCP, 并且端口号在2000-2500范围内的封包
src protrange 2000-2500
// 显示除了icmp以外的所有封包,icmp通常被ping工具使用
not icmp 或者 ! icmp
// 显示来源IP地址为10.7.2.12,但目的地址不是10.200.0.0/16的封包
src host 10.7.2.12 and (not dst net 10.200.0.0/16)
显示过滤器--对捕捉到的数据包依据协议或包的内容进行过滤
Protocol(协议):
可以使用大量位于OSI模型第2至7层的协议。点击"表达式..."按钮后,您可以看到它们。比如:IP,TCP,DNS,SSH
string1和string2是可选的。
可以使用6种比较运算符:
Logical expressions(逻辑运算符):
可按协议来过滤,也可按协议属性值过滤
按协议进行过滤:
snmp || dns || icmp | 显示SNMP或DNS或ICMP封包。 |
ip.addr == 10.1.1.1 |
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6 |
ip.src == 10.230.0.0/16 | 显示来自10.230网段的封包。 |
tcp.port == 25 | 显示来源或目的TCP端口号为25的封包。 |
tcp.dstport == 25 | 显示目的TCP端口号为25的封包。 |
http.request.method== "POST" | 显示post请求方式的http封包。 |
http.host == "tracker.1ting.com" | 显示请求的域名为tracker.1ting.com的http封包。 |
tcp.flags.syn == 0×02 | 显示包含TCP SYN标志的封包。 |
示例:
// 显示SNMP或DNS或ICMP封包
snmp||dns||icmp
// 显示来源或目的的IP地址为10.1.1.1的封包
ip.addr==10.1.1.1
// 显示来源不为10.1.12.3或者目的不为10.4.5.6的封包。
ip.src!=10.1.2.3orip.dst!=10.4.5.6
// 显示来源或目的TCP端口为25的封包
tcp.port==25
// 显示目的TCP端口为25的封包
tcp.dstport==25
// 显示包含TCPSYN标志的封包
tcp.flags.syn==0x02
// 显示payload中包含"http"字符串的tcp封包。
tcpcontains"http"
// 显示请求的uri包含"online"的http封包。
http.request.uricontains"online"
// 16进制形式,tcp头部一般是20字节,所以这个是对payload的前三个字节进行过滤
tcp[20:3]==47:45:54
http.host[0:4]=="trac"
-------------------------------------------------------------------------------------------------------
参考资料:
http://blog.csdn.net/cumirror/article/details/7054496
http://blog.sina.com.cn/s/blog_3fcc38fc01017fwf.html
http://blog.51cto.com/skypegnu1/1540222