Wireshark使⽤与功能介绍
fidder主要是针对http(s)协议进⾏抓包分析的,所以类似wireshark/tcpdump这种⼯作在tcp/ip层上的抓包⼯具不太⼀样,这种⼯具⼀般在chrome/firefox的开发者⼯具下都有集成。
安装wireshare会推荐安装winpcap,winpcap(windows packet capture)是windows平台下⼀个免费,公共的⽹络访问系统。开发winpcap这个项⽬的⽬的在于为win32应⽤程序提供访问⽹络底层的能⼒.
Wireshark介绍
wireshark是⾮常流⾏的⽹络封包分析软件,功能⼗分强⼤。可以截取各种⽹络封包,显⽰⽹络封包的详细信息。
wireshark是开源软件,可以放⼼使⽤。
可以运⾏在Windows和Mac OS上。
正则匹配到第一个关键字就停止
使⽤wireshark的⼈必须了解⽹络协议,否则就看不懂wireshark了。
Wireshark不能做的
为了安全考虑,wireshark只能查看封包,⽽不能修改封包的内容,或者发送封包。
Wireshark VS Fiddler
Fiddler是在windows上运⾏的程序,专门⽤来捕获HTTP,HTTPS的。
wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容
总结,如果是处理HTTP,HTTPS 还是⽤Fiddler,  其他协议⽐如TCP,UDP 就⽤wireshark
同类的其他⼯具
微软的network monitor
sniffer
什么⼈会⽤到wireshark
1. ⽹络管理员会使⽤wireshark来检查⽹络问题
2. 软件测试⼯程师使⽤wireshark抓包,来分析⾃⼰测试的软件
3. 从事socket编程的⼯程师会⽤wireshark来调试
4. 听说,华为,中兴的⼤部分⼯程师都会⽤到wireshark。
总之跟⽹络相关的东西,都可能会⽤到wireshark.
sniffer:
1.安装sniffer后,运⾏时,不到⽹卡,(sniffer在win 7下不到⽹卡)
解决⽅法:点击开始—到sniffer的快捷⽅式—右键属性—把兼容模式改为“windows xp sp3”—确定—再次运⾏,就可以到⽹卡了。。。
2.运⾏sniffer时,⾥⾯的仪表盘不动,并且顶部提⽰“channels A and B link faults”点击“开始抓包“时,电脑蓝屏重启…
解决⽅法:出现这种问题的原因是你的sniffer版本低,识别不了⾃⼰的千兆⽹卡,把⾃⼰的sniffer升级到SNIFFER PORTABLE V4.7.5 SP5再运⾏,⼀切就OK,
3.sniffer可以⽤了,过⼀段时间就出现⼀个窗⼝,提⽰“脚本错误“,
解决⽅法:这是因为电脑⾥⾯的Java的原因,安装完Java后,就可以了,如果安装完Java,还是有提⽰窗⼝,那就不⽤理他,对抓包没有什么影响。
安装后点击运⾏就蓝屏。
这种情况是本本或者台式机是千兆⽹卡~ 千兆⽹卡必须得⽤Sniffer的SP5版本才可以~ 只有SP5版本⽀持千兆⽹卡!下载SnifferPro_V4.7.5 SP5,
wireshark是捕获机器上的某⼀块⽹卡的⽹络包,当你的机器上有多块⽹卡的时候,你需要选择⼀个⽹卡。
点击Caputre->Interfaces.. 出现下⾯对话框,选择正确的⽹卡。然后点击“Start”按钮, 开始抓包
窗⼝:
WireShark 主要分为这⼏个界⾯
1. Display Filter(显⽰过滤器),⽤于过滤
2. Packet List Pane(封包列表),
显⽰捕获到的封包,
有源地址和⽬标地址,端⼝号。
颜⾊不同,代表
3. Packet Details Pane(封包详细信息), 显⽰封包中的字段
4. Dissector Pane(16进制数据)
5. Miscellanous(地址栏,杂项)
Wireshark 显⽰过滤
使⽤过滤是⾮常重要的,
初学者使⽤wireshark时,将会得到⼤量的冗余信息,在⼏千甚⾄⼏万条记录中,以⾄于很难到⾃⼰需要的部分。搞得晕头转向。过滤器会帮助我们在⼤量的数据中迅速到我们需要的信息。
过滤器有两种,
⼀种是显⽰过滤器,就是主界⾯上那个,⽤来在捕获的记录中到所需要的记录
⼀种是捕获过滤器,⽤来过滤捕获的封包,以免捕获太多的记录。
在Capture -> Capture Filters 中设置。
过滤表达式的规则
表达式规则
1. 协议过滤
⽐如TCP,只显⽰TCP协议。
2. IP 过滤
⽐如 ip.src ==192.168.1.102 显⽰源地址为192.168.1.102,
ip.dst==192.168.1.102, ⽬标地址为192.168.1.102
3. 端⼝过滤
tcp.port ==80,  端⼝为80的
tcp.srcport == 80,  只显⽰TCP协议的愿端⼝为80的。
4. Http模式过滤
5. 逻辑运算符为&& ||
常⽤的过滤表达式
过滤表达式⽤途
http只查看HTTP协议的记录
ip.src ==192.168.1.102 || ip.dst==192.168.1.102源地址或者⽬标地址是192.168.1.102
搜索⽐较操作符
————————————————————–
http模式过滤:
http contains  ” ** ”
另外还有⼀些操作符只能使⽤类英语简写,不能使⽤类c语⾔简写。
contains 判断⼀个协议,字段或者分⽚包含⼀个值
matches            判断⼀个协议或者字符串匹配⼀个给定的Perl表达式
“matches “操作符允许⼀个过滤器使⽤与Perl兼容的正则表达式(PCRE)。“matches” 操作符只能应⽤于协议或者字符串类型的协议字段。例如:搜索⼀个给定的wAP WSP User-Agent,你可以这样写过滤器:
wsp.user_agent matches “(?i)cldc”
封包列表(Packet List Pane)
封包列表的⾯板中显⽰,编号,时间戳,源地址,⽬标地址,协议,长度,以及封包信息。
你可以看到不同的协议⽤了不同的颜⾊显⽰。
封包详细信息 (Packet Details Pane)
这个⾯板是我们最重要的,⽤来查看协议中的每⼀个字段。
各⾏信息分别为
Frame:  物理层的数据帧概况
Ethernet II: 数据链路层以太⽹帧头部信息
Internet Protocol Version 4: 互联⽹层IP包头部信息
Transmission Control Protocol:  传输层T的数据段头部信息,此处是TCP
Hypertext Transfer Protocol:  应⽤层的信息,此处是HTTP协议
从下图可以看到wireshark捕获到的TCP包中的每个字段。
实例分析TCP三次握⼿过程
看到这,
基本上对wireshak有了初步了解,
现在我们看⼀个TCP三次握⼿的实例
三次握⼿过程为
这图我都看过很多遍了,
这次我们⽤wireshark实际分析下三次握⼿的过程。
在wireshark中输⼊http过滤,
然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击“Follow TCP Stream”,
这样做的⽬的是为了得到与浏览器打开⽹站相关的数据包,将得到如下图
图中可以看到wireshark截获到了三次握⼿的三个数据包。第四个包才是HTTP的,
这说明HTTP的确是使⽤TCP建⽴连接的。
第⼀次握⼿数据包
客户端发送⼀个TCP,标志位为SYN,序列号为0,
代表客户端请求建⽴连接。
如下图
第⼆次握⼿的数据包
服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1,
如下图
第三次握⼿的数据包
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对⽅.并且在数据段放写ISN的+1, 如下图:
第三次握⼿的数据包
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对⽅.并且在数据段放写ISN的+1, 如下图:
(上图中的stream index是什么?
the stream index is an internal Wireshark mapping to: [IP address A, TCP port A, IP address B, TCP port B]
All the packets for the same tcp.stream value should have the same values for these fields (though the src/dest will be switched for A-
>B and B->A packets)
see the Statistics/Conversations/TCP tab in Wireshark to show a summary of these streams
Statistics/Conversations/TCP
Statistics/Conversations/endpoints/tcp
可以看到这些索引号对应的数据流
)
“Follow TCP Stream”
如果你处理TCP协议,想要查看Tcp流中的应⽤层数据,“Following TCP streams”功能将会很有⽤。如果你项查看telnet流中的密码,或者你想尝试弄明⽩⼀个数据流。或者你仅仅只需要⼀个显⽰过滤来显⽰某个TCP流的包。这些都可以通过Wireshark的“Following TCP streams”功能来实现。
在包列表中选择⼀个你感兴趣的TCP包,然后选择Wireshark⼯具栏菜单的“Following TCP Streams”选项(或者使⽤包列表⿏标右键的上下⽂菜单)。然后,Wireshark就会创建合适的显⽰过滤器,并弹出⼀个对话框显⽰TCP流的所有数据。
“Follow TCP Stream”对话框
流的内容出现的顺序同他们在⽹络中出现的顺序⼀致。从A到B的通信标记为红⾊,从B到A的通信标记为蓝⾊。当然,如果你喜欢的话你可以从“Edit/Preferences”菜单项的“Colores”修改颜⾊。
⾮打印字符将会被显⽰为圆点。XXX – What about line wrapping (maximum line length) and CRNL conversions?
在捕捉过程中,TCP流不能实时更新。想得到最近的内容需要重新打开对话框。
你可以在此对话框执⾏如下操作:
1. Save As 以当前选择格式保存流数据。
2. Print 以当前选择格式打印流数据。
3. Direction 选择流的显⽰⽅向(“Entire conversation”, “data from A to B only” or “data from B to A only”).
4. Filter out this stream 应⽤⼀个显⽰过滤,在显⽰中排除当前选择的TCP流。
5. Close 关闭当前对话框。移除对当前显⽰过滤的影响。
你可以⽤以下格式浏览流数据。
1. AsCII。在此视图下你可以以ASCII凡是查看数据。当然最适合基于ASCII的协议⽤,例如HTTP.
2. EBCDIC。For the big-iron freaks out there.(不知道这句是什么意思, EBCDIC 是IBM公司的字符⼆进制编码标准。)
3. HEX Dump. 允许你查看所有数据,可能会占⽤⼤量屏幕空间。适合显⽰⼆进制协议。
4. C Arrays. 允许你将流数据导⼊你⾃⼰的C语⾔程序。
5. RAW。
允许你载⼊原始数据到其他应⽤程序做进⼀步分析。显⽰类似与ASCII设置。但“save As”将会保存为⼆进制⽂件
wireshark抓包之前设置:
Interface:指定在哪个接⼝(⽹卡)上抓包(系统会⾃动选择⼀块⽹卡)。
Limit each packet:限制每个包的⼤⼩,缺省情况不限制。
Capture packets in promiscuous mode:是否打开混杂模式。如果打开,抓取所有的数据包。⼀般情况下只需要监听本机收到或者发出的包,因此应该关闭这个选项。
Filter:过滤器。只抓取满⾜过滤规则的包。
File:可输⼊⽂件名称将抓到的包写到指定的⽂件中。
Use ring buffer:是否使⽤循环缓冲。缺省情况下不使⽤,即⼀直抓包。循环缓冲只有在写⽂件的时候才有效。如果使⽤了循环缓冲,还需要设置⽂件的数⽬,⽂件多⼤时回卷。
Update list of packets in real time:如果复选框被选中,可以使每个数据包在被截获时就实时显⽰出来,⽽不是在嗅探过程结束之后才显⽰所有截获的数据包。
单击”OK”按钮开始抓包,系统显⽰出接收的不同数据包的统计信息,单击”Stop”按钮停⽌抓包后,所抓包的分析结果显⽰在⾯板中,如下图所⽰:
验证⽹络字节序
⽹络上的数据流是字节流,对于⼀个多字节数值(⽐如⼗进制1014 = 0x03 f6),在进⾏⽹络传输的时候,先传递哪个字节,即先传递⾼位”03″还是先传递低位”f6″。也就是说,当接收端收到第⼀个字节的时候,它是将这个字节作为⾼位还是低位来处理。
下⾯通过截图具体说明:
最下⾯是物理媒体上传输的字节流的最终形式,都是16进制表⽰,发送时按顺序先发送00 23 54 c3 …00 03 f6 …接收时也按此顺序接收字节。
选中total length:1014,它的⼗六进制表⽰是0x03f6,从下⾯的蓝⾊选中区域可以看到,03在前⾯,f6在后⾯,即⾼字节数据在低地址,低字节数据在⾼地址(图中地址从上到下从左到右依次递增),所以可知,⽹络字节序采⽤的是⼤端模式。
wireshark过滤器
过滤器的区别
捕捉过滤器(CaptureFilters):⽤于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
显⽰过滤器(DisplayFilters):在捕捉结果中进⾏详细查。他们可以在得到捕捉结果后随意修改。
那么我应该使⽤哪⼀种过滤器呢?
两种过滤器的⽬的是不同的。
捕捉过滤器是数据经过的第⼀层过滤器,它⽤于控制捕捉数据的数量,以避免产⽣过⼤的⽇志⽂件。
显⽰过滤器是⼀种更为强⼤(复杂)的过滤器。它允许您在⽇志⽂件中迅速准确地到所需要的记录。
两种过滤器使⽤的语法是完全不同的。
捕捉过滤器
Protocol(协议):
可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果没有特别指明是什么协议,则默认使⽤所有⽀持的协议。
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″相同。
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-05-c5-44-b1-3c的封包。如果你想抓本机与所有外⽹通讯的数据包时,可以将这⾥的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”相同).

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。