拖延了两个月的总结!下面的很大一部分来自其它博客。php
wireshark过滤器的区别html
捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。须要在开始捕捉前设置。在Capture -> Capture Filters 中设置
显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们能够在获得捕捉结果后随意修改。服务器
两种过滤器的目的是不一样的。网络
捕捉过滤器是数据通过的第一层过滤器,它用于控制捕捉数据的数量,以免产生过大的日志文件。显示过滤器是一种更为强大(复杂)的过滤器。它容许您在日志文件中迅速准确地找到所须要的记录。app
两种过滤器使用的语法是彻底不一样的。tcp
捕捉过滤器
Protocol(协议):
可能的值:ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp
若是没有特别指明是什么协议,则默认使用全部支持的协议。ide
Direction(方向):
可能的值: src, dst, src and dst, src or dst
若是没有特别指明来源或目的地,则默认使用 "src or dst" 做为关键字。
例如,"host 10.2.2.2"与"src or dst host 10.2.2.2"是同样的。工具
Host(s):
可能的值:net, port, host, portrange.
若是没有指定此值,则默认使用”host”关键字。
例如,"src 10.1.1.1"与"src host 10.1.1.1"相同。unix
Logical Operations(逻辑运算):
可能的值:not, and, or.
否(“not”)具备最高的优先级。或(“or”)和与(“and”)具备相同的优先级,运算时从左至右进行。
例如,
"not tcp port 3128 and tcp port 23″与”(not tcp port 3128) and tcp port 23"相同。
"not tcp port 3128 and tcp port 23″与”not (tcp port 3128 and tcp port 23)"不一样。日志
例子:
tcp dst port 3128
//捕捉目的TCP端口为3128的封包。
ip src host 10.1.1.1
//捕捉来源IP地址为10.1.1.1的封包。
host 10.1.2.3
//捕捉目的或来源IP地址为10.1.2.3的封包。
ether host e0-05-c5-44-b1-3c
//捕捉目的或来源MAC地址为e0的封包。若是你想抓本机与全部外网通信的数据包时,能够将这里的mac地址换成路由的mac地址便可。
src portrange 2000-2500
//捕捉来源为UDP或TCP,而且端口号在2000至2500范围内的封包。
not imcp
//显示除了icmp之外的全部封包。(icmp一般被ping工具使用)
src host 10.7.2.12 and not dst net 10.200.0.0/16
//显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
//捕捉来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,而且目的位于网络 10.0.0.0/8内的全部封包。
src net 192.168.0.0/24
src net 192.168.0.0 mask 255.255.255.0
//捕捉源地址为192.168.0.0网络内的全部封包。
注意事项:
当使用关键字做为值时,需使用反斜杠"/"。
"ether proto /ip" (与关键字"ip"相同).
这样写将会以IP协议做为目标。
"ip proto /icmp" (与关键字"icmp"相同).
这样写将会以ping工具经常使用的icmp做为目标。
能够在"ip"或"ether"后面使用"multicast"及"broadcast"关键字。
当您想排除广播请求时,"no broadcast"就会很是有用。
Protocol(协议):
您可使用大量位于OSI模型第2至7层的协议。点击"Expression…"按钮后,您能够看到它们。
好比:IP,TCP,DNS,SSH
String1, String2 (可选项):
协议的子类。
点击相关父类旁的"+"号,而后选择其子类。
Comparison operators (比较运算符):
可使用6种比较运算符:
Logical expressions(逻辑运算符):
显示过滤器
例子:
1. 协议过滤
snmp || dns || icmp //显示SNMP或DNS或ICMP封包。
2. IP 过滤
ip.addr == 10.1.1.1 //显示来源或目的IP地址为10.1.1.1的封包。
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6 //显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。
换句话说,显示的封包将会为:
来源IP:除了10.1.2.3之外任意;目的IP:任意
以及
来源IP:任意;目的IP:除了10.4.5.6之外任意
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6 //显示来源不为10.1.2.3而且目的IP不为10.4.5.6的封包。
换句话说,显示的封包将会为:
来源IP:除了10.1.2.3之外任意;同时须知足,目的IP:除了10.4.5.6之外任意
3. 端口过滤
tcp.port == 25 //显示来源或目的TCP端口号为25的封包。
tcp.dstport == 25 //显示目的TCP端口号为25的封包。
tcp.flags //显示包含TCP标志的封包。
tcp.flags.syn == 0×02 //显示包含TCP SYN标志的封包。
4. Http模式过滤
http.request.method=="GET", 只显示HTTP GET方法的。
5. 逻辑运算符为 AND/ OR
经常使用的过滤表达式
过滤表达式 用途
http 只查看HTTP协议的记录
ip.src ==192.168.1.102 or ip.dst==192.168.1.102 源地址或者目标地址是192.168.1.102
若是过滤器的语法是正确的,表达式的背景呈绿色。若是呈红色,说明表达式有误。
更为详细的说明请见:http://openmaniak.com/cn/wireshark_filters.php
以上只是抓包和简单的过滤,那么其实若是你要想达到可以分析这些网络包的要求时,还须要了解下一些数据包的标记,好比咱们常说的TCP三次握手是怎么回事?
三次握手Three-way Handshake
一个虚拟链接的创建是经过三次握手来实现的
1. (Client) –> [SYN] –> (Server)
假如Client和Server通信. 当Client要和Server通讯时,Client首先向Server发一个SYN (Synchronize) 标记的包,告诉Server请求创建链接.
注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当Server收到Client发来的SYN包,才可创建链接,除此以外别无他法。所以,若是你的防火墙丢弃全部的发往外网接口的SYN包,那么你将不 能让外部任何主机主动创建链接。
2. (Client) <– [SYN/ACK] <–(Server)
接着,Server收到来自Client发来的SYN包后,会发一个对SYN包的确认包(SYN/ACK)给Client,表示对第一个SYN包的确认,并继续握手操做.
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.
3. (Client) –> [ACK] –> (Server)
Client收到来自Server的SYN/ACK 包,Client会再向Server发一个确认包(ACK),通知Server链接已创建。至此,三次握手完成,一个TCP链接完成。
Note: ACK包就是仅ACK 标记设为1的TCP包. 须要注意的是当三此握手完成、链接创建之后,TCP链接的每一个包都会设置ACK位。
这就是为什么链接跟踪很重要的缘由了. 没有链接跟踪,防火墙将没法判断收到的ACK包是否属于一个已经创建的链接.通常的包过滤(Ipchains)收到ACK包时,会让它经过(这绝对不是个 好主意). 而当状态型防火墙收到此种包时,它会先在链接表中查找是否属于哪一个已建链接,不然丢弃该包。
四次握手Four-way Handshake
四次握手用来关闭已创建的TCP链接
1. (Client) –> ACK/FIN –> (Server)
2. (Client) <– ACK <– (Server)
3. (Client) <– ACK/FIN <– (Server)
4. (Client) –> ACK –> (Server)
注意: 因为TCP链接是双向链接, 所以关闭链接须要在两个方向上作。ACK/FIN 包(ACK 和FIN 标记设为1)一般被认为是FIN(终结)包.然而, 因为链接尚未关闭, FIN包老是打上ACK标记. 没有ACK标记而仅有FIN标记的包不是合法的包,而且一般被认为是恶意的。
链接复位Resetting a connection
四次握手不是关闭TCP链接的惟一方法. 有时,若是主机须要尽快关闭链接(或链接超时,端口或主机不可达),RST (Reset)包将被发送. 注意在,因为RST包不是TCP链接中的必须部分, 能够只发送RST包(即不带ACK标记). 但在正常的TCP链接中RST包能够带ACK确认标记
请注意RST包是能够不要收到方确认的?
无效的TCP标记Invalid TCP Flags
到目前为止,你已经看到了 SYN, ACK, FIN, 和RST 标记. 另外,还有PSH (Push) 和URG (Urgent)标记.
最多见的非法组合是SYN/FIN 包. 注意:因为 SYN包是用来初始化链接的, 它不可能和 FIN和RST标记一块儿出现. 这也是一个恶意攻击.
因为如今大多数防火墙已知 SYN/FIN 包, 别的一些组合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明显,当网络中出现这种包时,很你的网络确定受到攻击了。
别的已知的非法包有FIN (无ACK标记)和”NULL”包。如同早先讨论的,因为ACK/FIN包的出现是为了关闭一个TCP链接,那么正常的FIN包老是带有 ACK 标记。”NULL”包就是没有任何TCP标记的包(URG,ACK,PSH,RST,SYN,FIN都为0)。
到目前为止,正常的网络活动下,TCP协议栈不可能产生带有上面提到的任何一种标记组合的TCP包。当你发现这些不正常的包时,确定有人对你的网络不怀好意。
UDP (用户数据包协议User Datagram Protocol)
TCP是面向链接的,而UDP是非链接的协议。UDP没有对接受进行确认的标记和确认机制。对丢包的处理是在应用层来完成的。(or accidental arrival).
此处须要重点注意的事情是:在正常状况下,当UDP包到达一个关闭的端口时,会返回一个UDP复位包。因为UDP是非面向链接的, 所以没有任何确认信息来确认包是否正确到达目的地。所以若是你的防火墙丢弃UDP包,它会开放全部的UDP端口(?)。
因为Internet上正常状况下一些包将被丢弃,甚至某些发往已关闭端口(非防火墙的)的UDP包将不会到达目的,它们将返回一个复位UDP包。
由于这个缘由,UDP端口扫描老是不精确、不可靠的。
看起来大UDP包的碎片是常见的DOS (Denial of Service)攻击的常见形式 (这里有个DOS攻击的例子,http://grc.com/dos/grcdos.htm ).
ICMP (网间控制消息协议Internet Control Message Protocol)
如同名字同样, ICMP用来在主机/路由器之间传递控制信息的协议。 ICMP包能够包含诊断信息(ping, traceroute - 注意目前unix系统中的traceroute用UDP包而不是ICMP),错误信息(网络/主机/端口 不可达 network/host/port unreachable), 信息(时间戳timestamp, 地址掩码address mask request, etc.),或控制信息 (source quench, redirect, etc.) 。
你能够在http://www.iana.org/assignments/icmp-parameters 中找到ICMP包的类型。
尽管ICMP一般是无害的,仍是有些类型的ICMP信息须要丢弃。
Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用来转发通信。
Echo (8), Timestamp (13) and Address Mask Request (17) 能用来分别判断主机是否起来,本地时间 和地址掩码。注意它们是和返回的信息类别有关的。 它们本身自己是不能被利用的,但它们泄露出的信息对攻击者是有用的。
ICMP消息有时也被用来做为DOS攻击的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p>
包碎片注意A Note About Packet Fragmentation
若是一个包的大小超过了TCP的最大段长度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit),可以把此包发往目的的惟一方法是把此包分片。因为包分片是正常的,它能够被利用来作恶意的攻击。
由于分片的包的第一个分片包含一个包头,若没有包分片的重组功能,包过滤器不可能检测附加的包分片。典型的攻击Typical attacks involve in overlapping the packet data in which packet header is 典型的攻击Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能做为 DOS 攻击的一部分,它能够crash older IP stacks 或涨死CPU链接能力。
Netfilter/Iptables中的链接跟踪代码能自动作分片重组。它仍有弱点,可能受到饱和链接攻击,能够把CPU资源耗光。
OK,到此为止,关于Wireshark抓包工具的一些小教程已经写完了,而致使我想写这么一个纠结的教程的缘由是,前几天经过这个抓包解决了梦幻西游在网维大师无盘上容易掉线的问题,当时捕捉到梦幻西游掉线时的数据包是这样的。
注意下图中的红色数据,123.58.184.241是梦幻西游的服务器,而192.168.1.41是玩梦幻西游的客户机,在掉线时,发现是先有梦幻西游的服务器向客户机发送一个[FIN,ACK]数据包,根据上面的解释,FIN标记的数据包是表明要断开链接的意思,而接着客户机又回给服务器一个确认断开连接包。当看到这个抓包数据时,就意识到,你们说的在网维大师系统虚拟盘上梦幻爱掉线的问题,并不是普通的网络问题,由于经过数据包的信息来看,是梦幻服务器主动要求断开连接,产生这个状况无非是如下几个缘由:
一、服务器发现客户端非法,好比有外挂什么的,踢掉了客户机;
二、服务器压力大,踢掉了客户机;
三、总之不是客户端问题致使的掉线;
那么既然结论是如此,为何会有在网维大师系统虚拟盘上容易出现梦幻掉线问题呢?缘由是因为网维大师系统虚拟盘是模拟真实硬盘方式来实现的,而在模拟过程当中,将硬盘的序列号设置为固定过的OSDIY888了,而梦幻西游恰好后识别客户机硬盘信息,发现大量客户端的硬盘序列号都是同样的,就认为是做弊或者使用挂机外挂了,结果就致使随机被服务器踢下线的状况发生,后来咱们将硬盘序列号设置为空,则没再出现该问题。这个问题在将来的新版本中会解决掉。
其它的一些介绍
网络层名词解析:view->name resolve->network layer
若是为官网的便携版,要用管理员角色
捕获界面有个Filter标签,那个实际上是一个Display Filter按钮
引用
说得很详细的一篇文章
http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
Wireshark抓包工具使用教程以及经常使用抓包规则
http://fangxin.blog.51cto.com/1125131/735178
若是看了这个你仍是不会用Wireshark,那就来找我吧
https://community.emc.com/thread/194901
过滤器实例
http://3layer.blog.51cto.com/57448/964580
http://missuniverse110.blog.51cto.com/784017/738884
替代软件ntop/cactihttp://dl528888.blog.51cto.com/2382721/851461微软的sniffer