WireShark基本使用
wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。 使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。 为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。
wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容。 如果是处理HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP就用wireshark。
界面
直接去https://www.wireshark.org/download.html下载相应平台版本然后安装即可。
wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。 点击Caputre->Options.. 选择正确的网卡,配置Capture Filter,然后点击”Start”按钮
开始抓包,最新的2.2.5抓包界面如下:
WireShark 主要分为这几个界面
- Display Filter(显示过滤器),用于过滤
- Packet List Pane(封包列表),显示捕获到的封包,有源地址和目标地址,端口号。颜色不同
- Packet Details Pane(封包详细信息), 显示封包中的字段
- Dissector Pane(16进制数据)
- Miscellanous(地址栏,杂项)
封包列表
No列编号,Time列是开启监控后到接受包的时间,Source是源IP,Destination是目标IP, Protocal是协议,Length是包长度,Info是包信息。
封包详细信息
这个面板是我们最重要的,用来查看协议中的每一个字段。各行信息分别为:
- Frame: 物理层的数据帧概况
- Ethernet II: 数据链路层以太网帧头部信息
- Internet Protocol Version 4: 互联网层IP包头部信息
- Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP
- Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
过滤器
WireShark使用过程中最方便的就是它的过滤器了。分为两种:
- 捕捉过滤器:用于决定将什么样的信息记录在捕捉结果中,需要在开始捕捉前设置。
- 显示过滤器:在捕捉结果中进行详细查找,他们可以在得到捕捉结果后随意修改。
捕捉过滤器(Capture Filter)
参考:https://wiki.wireshark.org/CaptureFilters
Protocol | Direction | Host(s) | Value | Logical Operations | Other expression |
---|---|---|---|---|---|
tcp | dst | 10.10.202.254 | 80 | and | tcp dst 10.2.2.2 3128 |
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”)具有相同的优先级,运算时从左至右进行。
例如:
1 | "not tcp port 3128 and tcp port 23"与"(not tcp port 3128) and tcp port 23"相同 |
显示过滤器(Display Filter)
参考:https://wiki.wireshark.org/DisplayFilters
显示过滤器就是在用来过滤封包列表的,它不影响捕获的日志文件,只是用来过滤显示列表中显示的项目用, 是在运行时设置的随时可以更改。
示例:
1 | ip.src != 10.1.2.3 and ip.dst != 10.4.5.6 |
TCP三次握手
这个在TCP/IP协议里面讲的太多了,就不多说了,直接给个图就能看得懂:
那么通过抓取一次HTTP访问例子来说明这个握手过程,
比如要访问http://www.cnblogs.com,先通过ping命令拿到ip地址为”223.6.248.220”,
然后新建一个Capture Filter,规则为host 223.6.248.220
,运行后网页访问这个链接:
非常清楚的显示了三次TCP握手过程。
跟踪一个请求
在wireshark中输入http过滤,然后选中GET / HTTP/1.1的那条记录,右键然后点击”Follow TCP Stream”, 这样做的目的是为了得到与浏览器打开网站相关的数据包
如果要跟踪HTTPS请求,先在Edit->Preferences->Protocols里面选择SSL
Wireshark解密TLS1.2数据包
对于HTTPS通信的数据包,如果想要Wireshark在抓包过程中自动解密,则要求密钥套件算法中不能使用DH或DHE算法。 可将Nginx的密钥套件配置修改成如下:
1 | ssl_ciphers HIGH:!aNULL:!DH;!DHE:!ECDH; |
下载Nginx的私钥或者导出私钥和证书为nginx.p12格式的正式库文件。 然后下载最新的Wireshark3.2.7,选择编辑 》 首选项 》 protocols 》 TLS
,配置私钥或PCKS12格式的证书库即可。