2023年7月3日发(作者:)
Wireshark基本⽤法过滤规则协议详解基本使⽤:
协议解析:
(1)版本 ,占4位,指IP协议的版本,⽬前⼴泛使⽤的IP协议版本号为4(即)。
2)⾸部长度 ,占4位,可表⽰的最⼤⼗进制数值是15。请注意,这个字段所表⽰数的单位是32位字长(1个32位字长是4字节),因此,当IP的⾸部长度为1111时(即⼗进制的15),⾸部长度就达到60字节。当IP分组的⾸部长度不是4字节的整数倍时,必须利⽤最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为⽅便。⾸部长度限制为60字节的缺点是有时可能不够⽤。但这样做是希望⽤户尽量减少开销。最常⽤的⾸部长度就是20字节(即⾸部长度为0101),这时不使⽤任何选项。
(3)服务类型 ,占8位,⽤来获得更好的服务,但实际上⼀直没有被使⽤过。1998年IETF把这个字段改名为区分服务DS(DifferentiatedServices)。只有在使⽤区分服务时,这个字段才起作⽤。
(4)总长度 ,总长度指⾸部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最⼤长度为2^16-1=65535字节。在IP层下⾯的每⼀种数据链路层都有⾃⼰的帧格式,其中包括帧格式中的数据字段的最⼤长度,这称为最⼤传送单元MTU(Maximum Transfer Unit)。当⼀个数据报封装成链路层的帧时,此数据报的总长度(即⾸部加上数据部分)⼀定不能超过下⾯的数据链路层的MTU值。
PS:图中总长度为84个字节,ping包默认为56个字节,ICMP包头是8个字节,再加上⾸部长度20个字节。下图我将包长度设置为112个字节后,总长度就变成140个字节了
(5)标识(identification),占16位。IP软件在存储器中维持⼀个计数器,每产⽣⼀个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是⽆连接服务,数据报不存在按序接收的问题。当数据报由于长度超过⽹络的MTU⽽必须分⽚时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分⽚后的各数据报⽚最后能正确地重装成为原来的数据报。
PS:个⼈理解就是⼀个数据报对应⼀个标识,当数据报长度超过最⼤MTU时会被分⽚,但被分⽚的标识字段是⼀样的。下⾯ping⼀个3100字节的包验证⼀下,百度⼤包经禁ping了,改pingMOP:
从上图可以看出3100字节的⼤包被分为3⽚字段都是⼀样的(12312)。
(6)标志(flag),占3位,但⽬前只有2位有意义。标志字段中的最低位记为MF(More Fragment)。MF=1即表⽰后⾯“还有分⽚”的数据报。MF=0表⽰这已是若⼲数据报⽚中的最后⼀个。标志字段中间的⼀位记为DF(Don’t Fragment),意思是“不能分⽚”。只有当DF=0时才允许分⽚。 (7)⽚偏移,占13位。⽚偏移指出:较长的分组在分⽚后,某⽚在原分组中的相对位置。也就是说,相对⽤户数据字段的起点,该⽚从何处开始。⽚偏移以8个字节为偏移单位。这就是说,除了最后⼀个分⽚,每个分⽚的长度⼀定是8字节(64位)的整数倍
PS:⽚偏移就是相对数据报字段的起点,以标识中的ping包来看,第⼀个分⽚的⽚偏移是0,第⼆个是1480,第3个是2960,如下图所⽰:
(8)⽣存时间,占8位,⽣存时间字段常⽤的的英⽂缩写是TTL(Time To Live),表明是数据报在⽹络中的寿命。由发出数据报的源点设置这个字段。其⽬的是防⽌⽆法交付的数据报⽆限制地在中兜圈⼦,因⽽⽩⽩消耗⽹络资源。最初的设计是以秒作为TTL的单位。每经过⼀个时,就把TTL减去数据报在路由器消耗掉的⼀段时间。若数据报在路由器消耗的时间⼩于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。后来把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据报之前就把TTL值减1.若TTL值减少到零,就丢弃这个数据报,不再转发。因此,现在TTL的单位不再是秒,⽽是跳数。TTL的意义是指明数据报在⽹络中⾄多可经过多少个路由器。显然,数据报在⽹络上经过的路由器的最⼤数值是255.若把TTL的初始值设为1,就表⽰这个数据报只能在本局域⽹中传送。
(9)协议占8位,协议字段指出此数据报携带的数据是使⽤何种协议,以便使⽬的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)⾸部检验和,占16位。这个字段只检验数据报的⾸部,但不包括数据部分。这是因为数据报每经过⼀个路由器,路由器都要重新计算⼀下⾸部检验和(⼀些字段,如⽣存时间、标志、⽚偏移等都可能发⽣变化)。不检验数据部分可减少计算的⼯作量。
(11)源地址,占32位。
(12)⽬的地址,占32位。
(13)数据部分,可变,最⼤为总长度-⾸部长度。
基本IO Graphs:IO graphs是⼀个⾮常好⽤的⼯具。基本的Wireshark IOgraph会显⽰抓包⽂件中的整体流量情况,通常是以每秒为单位(报⽂数或字节数)。默认X轴时间间隔是1秒,Y轴是每⼀时间间隔的报⽂数。如果想要查看每秒bit数或byte数,点击“Unit”,在“YAxis”下拉列表中选择想要查看的内容。这是⼀种基本的应⽤,对于查看流量中的波峰/波⾕很有帮助。要进⼀步查看,点击图形中的任意点就会看到报⽂的细节。过滤:每⼀个图形都可以应⽤⼀个过滤条件。这⾥创建两个不同的graph,⼀个HTTP⼀个ICMP。可以看到过滤条件中Graph 1使⽤“http”Graph 2使⽤“icmp”。图中可以看到红⾊ICMP流量中有些间隙,进⼀步分析。
过滤常⽤排错过滤条件:对于排查⽹络延时/应⽤问题有⼀些过滤条件是⾮常有⽤的:_segment:表明已经在抓包中看到不连续的序列号。报⽂丢失会造成重复的ACK,这会导致重传。ate_ack:显⽰被确认过不⽌⼀次的报⽂。⼤凉的重复ACK是TCP端点之间⾼延时的迹象。smission:显⽰抓包中的所有重传。如果重传次数不多的话还是正常的,过多重传可能有问题。这通常意味着应⽤性能缓慢和/或⽤户报⽂丢失。_update:将传输过程中的TCP window⼤⼩图形化。如果看到窗⼝⼤⼩下降为零,这意味着发送⽅已经退出了,并等待接收⽅确认所有已传送数据。这可能表明接收端已经不堪重负了。_in_flight:某⼀时间点⽹络上未确认字节数。未确认字节数不能超过你的TCP窗⼝⼤⼩(定义于最初3此TCP握⼿),为了最⼤化吞吐量你想要获得尽可能接近TCP窗⼝⼤⼩。如果看到连续低于TCP窗⼝⼤⼩,可能意味着报⽂丢失或路径上其他影响吞吐量的问题。_rtt:衡量抓取的TCP报⽂与相应的ACK。如果这⼀时间间隔⽐较长那可能表⽰某种类型的⽹络延时(报⽂丢失,拥塞,等等)。函数:IO Graphs有六个可⽤函数:SUM, MIN, AVG, MAX, COUNT, LOAD。MIN( ), AVG( ), MAX( )⾸先看⼀下帧之间的最⼩,平均和最⼤时间,这对于查看帧/报⽂之间的延时⾮常有⽤。我们可以将这些函数结合“_delta”过滤条件看清楚帧延时,并使得往返延时更为明显。如果抓包⽂件中包含不同主机之间的多个会话,⽽只想知道其中⼀个pair,可将“_delta”结合源和⽬标主机条件如“== &&==”。如下图所⽰:
函数我们做了以下步骤:将Y轴设置为“Advanced”,让Caculation域可见。不做这⼀步就看不到计算选项。X轴时间间隔1秒,所以每个柱状图代表1秒间隔的计算结果。过滤出两个特定IP地址的HTTP会话,使⽤条件:“(==192.168.1.4&& ==128.173.87.169) && http”。使⽤3个不同的graph,分别计算Min(), Avg(), Max()。对每⼀个计算结果应⽤条件“_delta”,将style设置成“FBar”,显⽰效果最佳。Count( ):此函数计算时间间隔内事件发⽣的次数,在查看TCP分析标识符时很有⽤,例如重传。Sum( ):该函数统计事件的累加值。有两种常见的⽤例是看在捕获TCP数据量,以及检查TCP序列号。协议过滤器:arp:显⽰所有包括ARP请求和回复在内的所有ARP数据流。ip:显⽰内含IPv4头在内的(如ICMP⽬的地址不可达报⽂,在ICMP报⽂头之后返回到来⽅向的IPv4头)IP数据流。ipv6:显⽰所有IPv6数据流,包括内含IPv6报⽂头的IPv4报⽂,如6to4,Teredo,以及ISATAP数据流。tcp:显⽰所有基于TCP的数据流。应⽤过滤器:bootp:显⽰所有DHCP数据流(基于BOOTP)。dns:显⽰包括TCP区域传输以及基于标准UDP的DNS请求和回复在内的所有DNS数据流。tftp:显⽰所有TFTP(Trivial File Transfer Protocol)数据流。http:显⽰所有HTTP命令,回复以及数据传输报⽂,但不显⽰TCP握⼿报⽂,TCP ACK报⽂以及TCP结束报⽂。icmp:显⽰所有ICMP报⽂。域过滤器:me:显⽰所有包含主机名的DHCP数据流(DHCP基于BOOTP)。http:host:显⽰所有包含HTTP主机名字段的所有HTTP报⽂。此报⽂是客户端向⽹络服务器发送请求时发出的。d:显⽰所有包含命令的FTP数据流,⽐如USER,PASS,或RETR命令。字符过滤器::显⽰所有包含TCP分析标识的所有报⽂,包括报⽂丢失,重传,或零窗⼝标识。is,zero_window:显⽰含有表明发送⽅的接收缓存⽤完标识的报⽂。显⽰过滤器⽐较运算符:通过扩展过滤条件可查找某⼀域值,Wireshark针对此功能⽀持数字⽐较运算符。1. ==或eq例如: == 10.2.2.2显⽰所有源地址为10.2.2.2的IPv4数据流2. !=或ne例如:t != 80显⽰源端⼝除了80以外的所有TCP数据流3. >或gt例如:_relative > 1显⽰距前⼀个报⽂到达时间相差1秒的报⽂4. <或lt例如:_size < 1460显⽰当TCP接收窗⼝⼩于1460字节时的报⽂5. >=或ge例如:s >= 10显⽰包含10个以上answer的DNS响应报⽂6. <=或le例如: <= 10显⽰IP报⽂中Time to Live字段⼩于等于10的报⽂7. contains例如:http contains “GET”显⽰所有HTTP客户端发送给HTTP服务器的GET请求对于基于TCP应⽤的过滤条件采⽤⽐较运算符。例如,如果想看端⼝80上⾯的HTTP数据流,使⽤==80。⼩贴⼠:运算符两边不⽤留空格。 == 10.2.2.2与==10.2.2.2的效果是相同的。过滤HTTP数据流:在排查⽹页浏览器会话或检查⽹速过慢问题时,对浏览器会话进⾏过滤就显得尤为重要。过滤HTTP数据流有两种⽅式:==xx(xx表⽰所使⽤的HTTP端⼝)第⼆种过滤⽅法更加有效。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688340299a123188.html
评论列表(0条)