芒果视频app免费看20次-app真机测试

wireshark抓包分析
2023年4月3日发(作者:去除水印)

Wireshark使⽤与功能介绍

fidder主要是针对http(s)协议进⾏抓包分析的,所以类似wireshark/tcpdump这种⼯作在tcp/ip层上的抓包⼯具不太⼀样,这种⼯具⼀般在

chrome/firefox的开发者⼯具下都有集成。

安装wireshare会推荐安装winpcap,winpcap(windowspacketcapture)是windows平台下⼀个免费,公共的⽹络访问系统。开发winpcap这个

项⽬的⽬的在于为win32应⽤程序提供访问⽹络底层的能⼒.

Wireshark介绍

wireshark是⾮常流⾏的⽹络封包分析软件,功能⼗分强⼤。可以截取各种⽹络封包,显⽰⽹络封包的详细信息。

wireshark是开源软件,可以放⼼使⽤。

可以运⾏在Windows和MacOS上。

使⽤wireshark的⼈必须了解⽹络协议,否则就看不懂wireshark了。

Wireshark不能做的

为了安全考虑,wireshark只能查看封包,⽽不能修改封包的内容,或者发送封包。

WiresharkVSFiddler

Fiddler是在windows上运⾏的程序,专门⽤来捕获HTTP,HTTPS的。

wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容

总结,如果是处理HTTP,HTTPS还是⽤Fiddler,其他协议⽐如TCP,UDP就⽤wireshark

同类的其他⼯具

微软的networkmonitor

sniffer

什么⼈会⽤到wireshark

1.⽹络管理员会使⽤wireshark来检查⽹络问题

2.软件测试⼯程师使⽤wireshark抓包,来分析⾃⼰测试的软件

3.从事socket编程的⼯程师会⽤wireshark来调试

4.听说,华为,中兴的⼤部分⼯程师都会⽤到wireshark。

总之跟⽹络相关的东西,都可能会⽤到wireshark.

sniffer:

1.安装sniffer后,运⾏时,找不到⽹卡,(sniffer在win7下找不到⽹卡)

解决⽅法:点击开始—找到sniffer的快捷⽅式—右键属性—把兼容模式改为“windowsxpsp3”—确定—再次运⾏,就可以找到⽹卡了。。。

2.运⾏sniffer时,⾥⾯的仪表盘不动,并且顶部提⽰“channelsAandBlinkfaults”点击“开始抓包“时,电脑蓝屏重启…

解决⽅法:出现这种问题的原因是你的sniffer版本低,识别不了⾃⼰的千兆⽹卡,把⾃⼰的sniffer升级到SNIFFERPORTABLEV4.7.5SP5

再运⾏,⼀切就OK,

r可以⽤了,过⼀段时间就出现⼀个窗⼝,提⽰“脚本错误“,

解决⽅法:这是因为电脑⾥⾯的Java的原因,安装完Java后,就可以了,如果安装完Java,还是有提⽰窗⼝,那就不⽤理他,对抓包没有

什么影响。

安装后点击运⾏就蓝屏。

这种情况是本本或者台式机是千兆⽹卡~千兆⽹卡必须得⽤Sniffer的SP5版本才可以~只有SP5版本⽀持千兆⽹卡!下载SnifferPro_V4.7.5

SP5,

wireshark是捕获机器上的某⼀块⽹卡的⽹络包,当你的机器上有多块⽹卡的时候,你需要选择⼀个⽹卡。

点击Caputre->Interfaces..出现下⾯对话框,选择正确的⽹卡。然后点击“Start”按钮,开始抓包

窗⼝:

WireShark主要分为这⼏个界⾯

yFilter(显⽰过滤器),⽤于过滤

ListPane(封包列表),

显⽰捕获到的封包,

有源地址和⽬标地址,端⼝号。

颜⾊不同,代表

DetailsPane(封包详细信息),显⽰封包中的字段

torPane(16进制数据)

lanous(地址栏,杂项)

Wireshark显⽰过滤

使⽤过滤是⾮常重要的,

初学者使⽤wireshark时,将会得到⼤量的冗余信息,在⼏千甚⾄⼏万条记录中,以⾄于很难找到⾃⼰需要的部分。搞得晕头转向。

过滤器会帮助我们在⼤量的数据中迅速找到我们需要的信息。

过滤器有两种,

⼀种是显⽰过滤器,就是主界⾯上那个,⽤来在捕获的记录中找到所需要的记录

⼀种是捕获过滤器,⽤来过滤捕获的封包,以免捕获太多的记录。

在Capture->CaptureFilters中设置。

过滤表达式的规则

表达式规则

1.协议过滤

⽐如TCP,只显⽰TCP协议。

过滤

⽐如==192.168.1.102显⽰源地址为192.168.1.102,

==192.168.1.102,⽬标地址为192.168.1.102

3.端⼝过滤

==80,端⼝为80的

t==80,只显⽰TCP协议的愿端⼝为80的。

模式过滤

==”GET”,只显⽰HTTPGET⽅法的。

5.逻辑运算符为&&||

常⽤的过滤表达式

过滤表达式⽤途

http只查看HTTP协议的记录

==192.168.1.102||==192.168.1.102源地址或者⽬标地址是192.168.1.102

搜索⽐较操作符

————————————————————–

http模式过滤:

==(“GET”/“POST”)

==”***”

_uri

httpcontains”**”

另外还有⼀些操作符只能使⽤类英语简写,不能使⽤类c语⾔简写。

contains判断⼀个协议,字段或者分⽚包含⼀个值

matches判断⼀个协议或者字符串匹配⼀个给定的Perl表达式

“matches“操作符允许⼀个过滤器使⽤与Perl兼容的正则表达式(PCRE)。“matches”操作符只能应⽤于协议或者字符串类型的协议字段。

例如:搜索⼀个给定的wAPWSPUser-Agent,你可以这样写过滤器:

_agentmatches“(?i)cldc”

封包列表(PacketListPane)

封包列表的⾯板中显⽰,编号,时间戳,源地址,⽬标地址,协议,长度,以及封包信息。

你可以看到不同的协议⽤了不同的颜⾊显⽰。

封包详细信息(PacketDetailsPane)

这个⾯板是我们最重要的,⽤来查看协议中的每⼀个字段。

各⾏信息分别为

Frame:物理层的数据帧概况

EthernetII:数据链路层以太⽹帧头部信息

InternetProtocolVersion4:互联⽹层IP包头部信息

TransmissionControlProtocol:传输层T的数据段头部信息,此处是TCP

HypertextTransferProtocol:应⽤层的信息,此处是HTTP协议

从下图可以看到wireshark捕获到的TCP包中的每个字段。

实例分析TCP三次握⼿过程

看到这,

基本上对wireshak有了初步了解,

现在我们看⼀个TCP三次握⼿的实例

三次握⼿过程为

这图我都看过很多遍了,

这次我们⽤wireshark实际分析下三次握⼿的过程。

在wireshark中输⼊http过滤,

然后选中GET/tankxiaoHTTP/1.1的那条记录,右键然后点击“FollowTCPStream”,

这样做的⽬的是为了得到与浏览器打开⽹站相关的数据包,将得到如下图

图中可以看到wireshark截获到了三次握⼿的三个数据包。第四个包才是HTTP的,

这说明HTTP的确是使⽤TCP建⽴连接的。

第⼀次握⼿数据包

客户端发送⼀个TCP,标志位为SYN,序列号为0,

代表客户端请求建⽴连接。

如下图

第⼆次握⼿的数据包

服务器发回确认包,标志位为SYN,ACK.将确认序号(AcknowledgementNumber)设置为客户的ISN加1以.即0+1=1,

如下图

第三次握⼿的数据包

客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对⽅.并且在数据

段放写ISN的+1,如下图:

第三次握⼿的数据包

客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对⽅.并且在数据

段放写ISN的+1,如下图:

(上图中的streamindex是什么?

thestreamindexisaninternalWiresharkmappingto:[IPaddressA,TCPportA,IPaddressB,TCPportB]

valueshouldhavethesamevaluesforthesefields(thoughthesrc/destwillbeswitchedforA-

>BandB->Apackets)

seetheStatistics/Conversations/TCPtabinWiresharktoshowasummaryofthesestreams

Statistics/Conversations/TCP

Statistics/Conversations/endpoints/tcp

可以看到这些索引号对应的数据流

)

“FollowTCPStream”

如果你处理TCP协议,想要查看Tcp流中的应⽤层数据,“FollowingTCPstreams”功能将会很有⽤。如果你项查看telnet流中的密码,或者你

想尝试弄明⽩⼀个数据流。或者你仅仅只需要⼀个显⽰过滤来显⽰某个TCP流的包。这些都可以通过Wireshark的“FollowingTCP

streams”功能来实现。

在包列表中选择⼀个你感兴趣的TCP包,然后选择Wireshark⼯具栏菜单的“FollowingTCPStreams”选项(或者使⽤包列表⿏标右键的上下⽂

菜单)。然后,Wireshark就会创建合适的显⽰过滤器,并弹出⼀个对话框显⽰TCP流的所有数据。

“FollowTCPStream”对话框

流的内容出现的顺序同他们在⽹络中出现的顺序⼀致。从A到B的通信标记为红⾊,从B到A的通信标记为蓝⾊。当然,如果你喜欢的话你可

以从“Edit/Preferences”菜单项的“Colores”修改颜⾊。

⾮打印字符将会被显⽰为圆点。XXX–Whataboutlinewrapping(maximumlinelength)andCRNLconversions?

在捕捉过程中,TCP流不能实时更新。想得到最近的内容需要重新打开对话框。

你可以在此对话框执⾏如下操作:

以当前选择格式保存流数据。

以当前选择格式打印流数据。

ion选择流的显⽰⽅向(“Entireconversation”,“datafromAtoBonly”or“datafromBtoAonly”).

outthisstream应⽤⼀个显⽰过滤,在显⽰中排除当前选择的TCP流。

关闭当前对话框。移除对当前显⽰过滤的影响。

你可以⽤以下格式浏览流数据。

。在此视图下你可以以ASCII凡是查看数据。当然最适合基于ASCII的协议⽤,例如HTTP.

。Forthebig-ironfreaksoutthere.(不知道这句是什么意思,EBCDIC是IBM公司的字符⼆进制编码标准。)

p.允许你查看所有数据,可能会占⽤⼤量屏幕空间。适合显⽰⼆进制协议。

s.允许你将流数据导⼊你⾃⼰的C语⾔程序。

允许你载⼊原始数据到其他应⽤程序做进⼀步分析。显⽰类似与ASCII设置。但“saveAs”将会保存为⼆进制⽂件

wireshark抓包之前设置:

Interface:指定在哪个接⼝(⽹卡)上抓包(系统会⾃动选择⼀块⽹卡)。

Limiteachpacket:限制每个包的⼤⼩,缺省情况不限制。

Capturepacketsinpromiscuousmode:是否打开混杂模式。如果打开,抓取所有的数据包。⼀般情况下只需要监听本机收到或者发出的

包,因此应该关闭这个选项。

Filter:过滤器。只抓取满⾜过滤规则的包。

File:可输⼊⽂件名称将抓到的包写到指定的⽂件中。

Useringbuffer:是否使⽤循环缓冲。缺省情况下不使⽤,即⼀直抓包。循环缓冲只有在写⽂件的时候才有效。如果使⽤了循环缓冲,还需

要设置⽂件的数⽬,⽂件多⼤时回卷。

Updatelistofpacketsinrealtime:如果复选框被选中,可以使每个数据包在被截获时就实时显⽰出来,⽽不是在嗅探过程结束之后才显⽰

所有截获的数据包。

单击”OK”按钮开始抓包,系统显⽰出接收的不同数据包的统计信息,单击”Stop”按钮停⽌抓包后,所抓包的分析结果显⽰在⾯板中,如下图

所⽰:

验证⽹络字节序

⽹络上的数据流是字节流,对于⼀个多字节数值(⽐如⼗进制1014=0x03f6),在进⾏⽹络传输的时候,先传递哪个字节,即先传递⾼

位”03″还是先传递低位”f6″。也就是说,当接收端收到第⼀个字节的时候,它是将这个字节作为⾼位还是低位来处理。

下⾯通过截图具体说明:

最下⾯是物理媒体上传输的字节流的最终形式,都是16进制表⽰,发送时按顺序先发送002354c3…0003f6…接收时也按此顺序接收字

节。

选中totallength:1014,它的⼗六进制表⽰是0x03f6,从下⾯的蓝⾊选中区域可以看到,03在前⾯,f6在后⾯,即⾼字节数据在低地址,

低字节数据在⾼地址(图中地址从上到下从左到右依次递增),所以可知,⽹络字节序采⽤的是⼤端模式。

wireshark过滤器

过滤器的区别

捕捉过滤器(CaptureFilters):⽤于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。

显⽰过滤器(DisplayFilters):在捕捉结果中进⾏详细查找。他们可以在得到捕捉结果后随意修改。

那么我应该使⽤哪⼀种过滤器呢?

两种过滤器的⽬的是不同的。

捕捉过滤器是数据经过的第⼀层过滤器,它⽤于控制捕捉数据的数量,以避免产⽣过⼤的⽇志⽂件。

显⽰过滤器是⼀种更为强⼤(复杂)的过滤器。它允许您在⽇志⽂件中迅速准确地找到所需要的记录。

两种过滤器使⽤的语法是完全不同的。

捕捉过滤器

Protocol(协议):

可能的值:ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcpandudp.

如果没有特别指明是什么协议,则默认使⽤所有⽀持的协议。

Direction(⽅向):

可能的值:src,dst,srcanddst,srcordst

如果没有特别指明来源或⽬的地,则默认使⽤“srcordst”作为关键字。

例如,“host10.2.2.2″与“srcordsthost10.2.2.2″是⼀样的。

Host(s):

可能的值:net,port,host,portrange.

如果没有指定此值,则默认使⽤“host”关键字。

例如,“src10.1.1.1″与“srchost10.1.1.1″相同。

LogicalOperations(逻辑运算):

可能的值:not,and,or.

否(“not”)具有最⾼的优先级。或(“or”)和与(“and”)具有相同的优先级,运算时从左⾄右进⾏。

例如,

“nottcpport3128andtcpport23″与“(nottcpport3128)andtcpport23″相同。

“nottcpport3128andtcpport23″与“not(tcpport3128andtcpport23)”不同。

例⼦:

tcpdstport3128//捕捉⽬的TCP端⼝为3128的封包。

ipsrchost10.1.1.1//捕捉来源IP地址为10.1.1.1的封包。

host10.1.2.3//捕捉⽬的或来源IP地址为10.1.2.3的封包。

etherhoste0-05-c5-44-b1-3c//捕捉⽬的或来源MAC地址为e0-05-c5-44-b1-3c的封包。如果你想抓本机与所有外⽹通讯的数据包时,可以将

这⾥的mac地址换成路由的mac地址即可。

srcportrange2000-2500//捕捉来源为UDP或TCP,并且端⼝号在2000⾄2500范围内的封包。

notimcp//显⽰除了icmp以外的所有封包。(icmp通常被ping⼯具使⽤)

srchost10.7.2.12andnotdstnet10.200.0.0/16//显⽰来源IP地址为10.7.2.12,但⽬的地不是10.200.0.0/16的封包。

(srchost10.4.1.12orsrcnet10.6.0.0/16)andtcpdstportrange200-10000anddstnet10.0.0.0/8//捕捉来源IP为10.4.1.12或者来源⽹络为

10.6.0.0/16,⽬的地TCP端⼝号在200⾄10000之间,并且⽬的位于⽹络10.0.0.0/8内的所有封包。

srcnet192.168.0.0/24

srcnet192.168.0.0mask255.255.255.0//捕捉源地址为192.168.0.0⽹络内的所有封包。

注意事项:

当使⽤关键字作为值时,需使⽤反斜杠“/”。

“etherproto/ip”(与关键字“ip”相同).

这样写将会以IP协议作为⽬标。

“ipproto/icmp”(与关键字“icmp”相同).

这样写将会以ping⼯具常⽤的icmp作为⽬标。

可以在“ip”或“ether”后⾯使⽤“multicast”及“broadcast”关键字。

当您想排除⼴播请求时,“nobroadcast”就会⾮常有⽤。

Protocol(协议):

您可以使⽤⼤量位于OSI模型第2⾄7层的协议。点击“Expression…”按钮后,您可以看到它们。

⽐如:IP,TCP,DNS,SSH

String1,String2(可选项):

协议的⼦类。

点击相关⽗类旁的“+”号,然后选择其⼦类。

Comparisonoperators(⽐较运算符):

可以使⽤6种⽐较运算符:

Logicalexpressions(逻辑运算符):

显⽰过滤器

以上只是抓包和简单的过滤,那么其实如果你要想达到能够分析这些⽹络包的要求时,还需要了解下⼀些数据包的标记,⽐如我们常说的

TCP三次握⼿是怎么回事?

三次握⼿Three-wayHandshake

⼀个虚拟连接的建⽴是通过三次握⼿来实现的

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-wayHandshake

四次握⼿⽤来关闭已建⽴的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标记的包不是合法的包,并且通常被认为是恶意的。

连接复位Resettingaconnection

四次握⼿不是关闭TCP连接的唯⼀⽅法.有时,如果主机需要尽快关闭连接(或连接超时,端⼝或主机不可达),RST(Reset)包将被发送.注意在,

由于RST包不是TCP连接中的必须部分,可以只发送RST包(即不带ACK标记).但在正常的TCP连接中RST包可以带ACK确认标记

请注意RST包是可以不要收到⽅确认的?

⽆效的TCP标记InvalidTCPFlags

到⽬前为⽌,你已经看到了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包。当你发现这些不正常的包时,肯定有

⼈对你的⽹络不怀好意。

更多推荐

wireshark抓包分析