概述
1.5.0. 本节前言
1.4 节内容,暂时省略。
随着我们教程的深入,我们也会使用Wireshark来准备测试用的数据包,校验程序的准确性,编写程序之前做人工分析以提供准确的解决问题思路或算法。
Wireshark的详细使用和高级功能,建议有精力的同学去阅读《Wireshark网络分析实战》一书,本节内容以基础和暂时够用为原则。
Wireshark 是当今世界上被应用最广泛的网络协议分析工具。用户通常使用Wireshark来学习网络协议,分析网络问题,检测攻击和木马等。
Wireshark官网为https://www.wireshark.org/。
进入下载页面,我们可以看到Wireshark提供windows和Mac OS X的安装文件,同时提供了源码供在Linux环境中进行安装。
下载和安装,这里就不详细说明了,安装程序还是源码安装1.2、1.4节课程中,有详细的演示,各位同学依样画葫芦即可。
在Kali Linux中,已经预装了Wireshark,只需要在终端输入Wireshark,即可启动程序。
启动之后,由于Kali默认是root账号,会引发Lua加载错误,直接忽略即可。
1.5.2 抓包
启动Wireshark后,在主界面会列出当前系统中所有的网卡信息。
在此处选择要监听的网卡,双击就会进入监听模式。还有另一个入口就是上方的配置按钮。
打开配置界面,可以对网卡和数据包捕获做一些配置
选中网卡,点击开始
抓包的过程中,我们可以看到数据的变化。点击停止按钮,停止捕获数据包。
在软件的核心界面就是数据包列表,显示的列有序号、时间、源IP、目标IP、协议、长度、基本信息。Wireshark使用不同的颜色对不同的协议做了区分。在视图菜单,我们可以找到和着色相关的命令。
在图9所示的命令中,对话着色用来选择指定颜色对应的协议,着色分组列表用来隐藏非选中着色分组中的数据包,着色规则用来定义着色外观和包含的协议,如图10所示。
1.5.3 包过滤
捕获的数据包通常都是比较庞大的,如果没有过滤筛选机制,对任何人来说,都将是一个灾难。Wireshark提供了两种过滤器:捕捉过滤器和显示过滤器。
1.5.3.1 捕获过滤器捕捉过滤器是用来配置应该捕获什么样的数据包,在启动数据包捕捉之前就应该配置好。打开主界面“捕获”——>“捕获过滤器”。
在捕获过滤器界面,我们可以看到已有的过滤器,可以修改删除它们,同时我们可以增加自己的过滤器。
捕获过滤器语法:
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" 作为关键字。
可能的值: net, port, host, portrange.
如果没有指定此值,则默认使用"host"关键字。
Logical Operations(逻辑运算):
可能的值:not, and, or.
否("not")具有最高的优先级。或("or")和与("and")具有相同的优先级,运算时从左至右进行。
下面我们具体看几个示例:
显示目的TCP端口为3128的封包。
tcp dst port 3128
显示来源IP地址为10.1.1.1的封包。
ip src host 10.1.1.1
显示目的或来源IP地址为10.1.2.3的封包。
host 10.1.2.3
显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
src portrange 2000-2500
显示除了icmp以外的所有封包。(icmp通常被ping工具使用)
not icmp
显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
src host 10.7.2.12 and not dst net 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
当使用关键字作为值时,需使用反斜杠“”。"ether proto ip" (与关键字"ip"相同)。这样写将会以IP协议作为目标。"ip proto icmp" (与关键字"icmp"相同).这样写将会以ping工具常用的icmp作为目标。可以在"ip"或"ether"后面使用"multicast"及"broadcast"关键字。当您想排除广播请求时,"no broadcast"就会非常有用。
在过滤器列表中选择一个过滤器。
显示过滤器用来过滤已经捕获的数据包。在数据包列表的上方,有一个显示过滤器输入框,可以直接输入过滤表达式,点击输入框右侧的表达式按钮,可以打开表达式编辑器,左侧框内是可供选择的字段。
下面我们对各个字段做介绍:
被程序员们熟知的逻辑异或是一种排除性的或。当其被用在过滤器的两个条件之间时,只有当且仅当其中的一个条件满足时,这样的结果才会被显示在屏幕上。
让我们举个例子:
只有当目的TCP端口为80或者来源于端口1025(但又不能同时满足这两点)时,这样的封包才会被显示。
下面再通过一些实例来加深了解。
显示SNMP或DNS或ICMP封包
显示来源或目的IP地址为10.1.1.1的封包
显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。
显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。
显示来源或目的TCP端口号为25的封包。
显示目的TCP端口号为25的封包。
显示包含TCP标志的封包。
显示包含TCP SYN标志的封包。
在使用过滤器表达式编辑器的时候,如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。
生成表达式,点击Ok按钮,回到数据包列表界面。
回车之后,就会看到过滤效果。
此外我们也可以通过选中数据包来生成过滤器,右键——>作为过虑器应用。
图22中,选择了两个数据包,协议不同,自动生成的过滤表达式会按照你鼠标点击的位置所在的列字典作为条件来生成。图中我两次的位置都在Destination列上,所以生成的表达式是一样的。
1.5.4 数据分析选中某一条数据项,会在如图23所示的两个区域,显示该数据包的详细信息。
在图23中,1区为详细信息显示区域,这个区域内对数据包按照协议字段做了较为详细的分析。2区为16进制数据区。结合1区和2区,再结合书本上的知识,我们就可以进行协议分析的研究和学习了。图23中,显示的详细信息分别为:
当我们点击1区的字段的时候,可以看到在2区对应的数据项,如图24。
图27就是经典的TCP三次握手,看它千百遍也不许厌烦,这是我大学时的必考题。
下面我们具体分析下实际三次握手的过程,打开Wireshark启动抓包,然后在浏览器打开我的博客http://www.cnblogs.com/xuanhun。
停止抓包后输入过滤表达式
过滤出连接到www.cnblogs.com的所有数据包。
点击TCP流之后,会根据tcp.stream字段生成过滤表达式,我们可以看到这次HTTP请求基于的TCP三次握手的数据包,如图30所示。
下面我们依次分析下序号为69、79、80的三个数据包。
69号数据的TCP数据字段如图31所示,我们可以看到序列号为0,标志位为SYN。
79号数据包的TCP字段如图32所示,序列号为0,Ack 序号加1为1,标志位为(SYN,ACK)
80号数据包TCP字段如图32所示,客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方。
这样就完成了TCP的三次握手。
1.5.6 小结网络分析是网络编程的前置基本技能,本节课对网络协议分析工具Wireshark做了一个快速入门,希望同学们多多练习,增强这方面的能力。
Wireshark在数据包捕获和分析方面具有超强的能力,但是它不能修改和发送数据包,在Python里很容易实现数据包的修改和发送。从下一节开始,我们正式进入第二章——Python编程基础。
最后
以上就是个性冬日为你收集整理的PYTHON黑帽编程————1.5 使用WIRESHARK练习网络协议分析的全部内容,希望文章能够帮你解决PYTHON黑帽编程————1.5 使用WIRESHARK练习网络协议分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复