PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析
1.5.0.1 本系列教程说明
本系列教程,采用的大纲母本为《Understanding Network Hacks Attack and Defense with Python》一书,为了解决很多同学对英文书的恐惧,解决看书之后实战过程中遇到的问题而作。由于原书很多地方过于简略,笔者根据实际测试情况和最新的技术发展对内容做了大量的变更,当然最重要的是个人偏好。教程同时提供图文和视频教程两种方式,供不同喜好的同学选择。
1.5.0.2 本节前言
在上一节,笔者罗列的学习网络编程应该了解或掌握的网络基础知识,这其中直接和编程相关的是网络协议。抓包分析,一直都是学习网络协议过程中,理论联系实践的最好方式,而目前最常用的抓包工具就是Wireshark。
随着我们教程的深入,我们也会使用Wireshark来准备测试用的数据包,校验程序的准确性,编写程序之前做人工分析以提供准确的解决问题思路或算法。
Wireshark的详细使用和高级功能,建议有精力的同学去阅读《Wireshark网络分析实战》一书,本节内容以基础和暂时够用为原则。
1.5.1 WIRESHARK 简介
Wireshark 是当今世界上被应用最广泛的网络协议分析工具。用户通常使用Wireshark来学习网络协议,分析网络问题,检测攻击和木马等。
Wireshark官网为https://www.wireshark.org/。
图1 Wireshark官网
进入下载页面,我们可以看到Wireshark提供windows和Mac OS X的安装文件,同时提供了源码供在Linux环境中进行安装。
图2
下载和安装,这里就不详细说明了,安装程序还是源码安装1.2、1.4节课程中,有详细的演示,各位同学依样画葫芦即可。
在Kali Linux中,已经预装了Wireshark,只需要在终端输入Wireshark,即可启动程序。
root@kali:~# wireshark
启动之后,由于Kali默认是root账号,会引发Lua加载错误,直接忽略即可。
图3
1.5.2 抓包
启动Wireshark后,在主界面会列出当前系统中所有的网卡信息。
图4
在此处选择要监听的网卡,双击就会进入监听模式。还有另一个入口就是上方的配置按钮。
图5
打开配置界面,可以对网卡和数据包捕获做一些配置。
图6
选中网卡,点击开始。
图7
抓包的过程中,我们可以看到数据的变化。点击停止按钮,停止捕获数据包。
图8
在软件的核心界面就是数据包列表,显示的列有序号、时间、源IP、目标IP、协议、长度、基本信息。Wireshark使用不同的颜色对不同的协议做了区分。在视图菜单,我们可以找到和着色相关的命令。
图9
在图9所示的命令中,对话着色用来选择指定颜色对应的协议,着色分组列表用来隐藏非选中着色分组中的数据包,着色规则用来定义着色外观和包含的协议,如图10所示。
图10
1.5.3 包过滤
捕获的数据包通常都是比较庞大的,如果没有过滤筛选机制,对任何人来说,都将是一个灾难。Wireshark提供了两种过滤器:捕捉过滤器和显示过滤器。
1.5.3.1 捕获过滤器
捕捉过滤器是用来配置应该捕获什么样的数据包,在启动数据包捕捉之前就应该配置好。打开主界面“捕获”——>“捕获过滤器”。
图11
在捕获过滤器界面,我们可以看到已有的过滤器,可以修改删除它们,同时我们可以增加自己的过滤器。
图12
捕获过滤器语法:
图13
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(s):
可能的值: net, port, host, portrange.
如果没有指定此值,则默认使用"host"关键字。 Logical Operations(逻辑运算):
可能的值:not, and, or.
否("not")具有最高的优先级。或("or")和与("and")具有相同的优先级,运算时从左至右进行。
下面我们具体看几个示例:
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的封包。
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 |
当使用关键字作为值时,需使用反斜杠“\”。"ether proto \ip" (与关键字"ip"相同)。这样写将会以IP协议作为目标。"ip proto \icmp" (与关键字"icmp"相同).这样写将会以ping工具常用的icmp作为目标。可以在"ip"或"ether"后面使用"multicast"及"broadcast"关键字。当您想排除广播请求时,"no broadcast"就会非常有用。
如何使用定义好的捕获过滤器呢?点击下图所示的展开过滤器按钮。
在过滤器列表中选择一个过滤器。
再双击启动抓包,就会看到效果了。
1.5.3.2 显示过滤器
显示过滤器用来过滤已经捕获的数据包。在数据包列表的上方,有一个显示过滤器输入框,可以直接输入过滤表达式,点击输入框右侧的表达式按钮,可以打开表达式编辑器,左侧框内是可供选择的字段。
图14
显示过滤器的语法如图15所示。
图15
下面我们对各个字段做介绍:
1) Protocol,协议字段。支持的协议可以从图14的编辑器中看到,从OSI 7层模型的2到7层都支持。
2) String1, String2 (可选项)。协议的子类,展开图14中的协议的三角,可以看到。
图16
3) Comparison operators,比较运算符。可以使用6种比较运算符如图17所示,逻辑运算符如图18所示。
图17 比较运算符
图18 逻辑运算符
被程序员们熟知的逻辑异或是一种排除性的或。当其被用在过滤器的两个条件之间时,只有当且仅当其中的一个条件满足时,这样的结果才会被显示在屏幕上。
让我们举个例子:
"tcp.dstport 80 xor tcp.dstport 1025"
只有当目的TCP端口为80或者来源于端口1025(但又不能同时满足这两点)时,这样的封包才会被显示。
下面再通过一些实例来加深了解。
snmp || dns || icmp
显示SNMP或DNS或ICMP封包。
ip.addr == 10.1.1.1
显示来源或目的IP地址为10.1.1.1的封包。
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6
显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6
显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。
tcp.port == 25
显示来源或目的TCP端口号为25的封包。
tcp.dstport == 25
显示目的TCP端口号为25的封包。
tcp.flags
显示包含TCP标志的封包。
tcp.flags.syn == 0x02
显示包含TCP SYN标志的封包。
在使用过滤器表达式编辑器的时候,如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。
生成表达式,点击Ok按钮,回到数据包列表界面。
图19
此时表达式会输入到表达式栏中。
图20
回车之后,就会看到过滤效果。
此外我们也可以通过选中数据包来生成过滤器,右键——>作为过虑器应用。
图21
如图21所示,不同的选项,大家都可以尝试下,都是基本逻辑谓词的组合。比如我选择“或选中”,可以组合多个数据包的条件,如图22所示。
图22
图22中,选择了两个数据包,协议不同,自动生成的过滤表达式会按照你鼠标点击的位置所在的列字典作为条件来生成。图中我两次的位置都在Destination列上,所以生成的表达式是一样的。
1.5.4 数据分析
选中某一条数据项,会在如图23所示的两个区域,显示该数据包的详细信息。
图23
在图23中,1区为详细信息显示区域,这个区域内对数据包按照协议字段做了较为详细的分析。2区为16进制数据区。结合1区和2区,再结合书本上的知识,我们就可以进行协议分析的研究和学习了。图23中,显示的详细信息分别为:
1) Frame: 物理层的数据帧概况
2) Ethernet II: 数据链路层以太网帧头部信息
3) Internet Protocol Version 4: 互联网层IP包头部信息
4) Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
5) Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
当我们点击1区的字段的时候,可以看到在2区对应的数据项,如图24。
图24
是时候把教科书搬出来了,在图25中,看到OSI七层模型和Wireshark数据包分析的对应情况。
图25(来源于网络)
再拿TCP数据包来举例,如图26。
图26(来源于网络)
用这样的方法来学习网络协议,是不是既简单又直观呢?还等什么,开始动手吧。
1.5.5 实例:分析TCP三次握手过程
(以下内容,部分来自http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html,做了一些修改,作者感谢原作者。)
图27(来源于网络)
图27就是经典的TCP三次握手,看它千百遍也不许厌烦,这是我大学时的必考题。
下面我们具体分析下实际三次握手的过程,打开Wireshark启动抓包,然后在浏览器打开我的博客http://www.cnblogs.com/xuanhun。
停止抓包后输入过滤表达式
ip.src == 192.168.1.38
过滤出连接到www.cnblogs.com的所有数据包。
图28
选中一个,右键然后点击"追踪流"——>TCP流。
图29
点击TCP流之后,会根据tcp.stream字段生成过滤表达式,我们可以看到这次HTTP请求基于的TCP三次握手的数据包,如图30所示。
图30
下面我们依次分析下序号为69、79、80的三个数据包。
图31
69号数据的TCP数据字段如图31所示,我们可以看到序列号为0,标志位为SYN。
图32
79号数据包的TCP字段如图32所示,序列号为0,Ack 序号加1为1,标志位为(SYN,ACK)。
图33
80号数据包TCP字段如图32所示,客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方。
这样就完成了TCP的三次握手。
1.5.6 小结
网络分析是网络编程的前置基本技能,本节课对网络协议分析工具Wireshark做了一个快速入门,希望同学们多多练习,增强这方面的能力。
Wireshark在数据包捕获和分析方面具有超强的能力,但是它不能修改和发送数据包,在Python里很容易实现数据包的修改和发送。从下一节开始,我们正式进入第二章——Python编程基础。
1.5.7 本节对应视频教程获取方法
在微信订阅号(xuanhun521)依次打开“网络安全”—>”Python黑客编程”,找到对应的本篇文章的1.5.7节,有具体获取视频教程的方法。
由于教程仍在创作过程中,在整套教程完结前,感兴趣的同学请关注我的微信订阅号(xuanhun521,下方二维码),我会第一时间在订阅号推送图文教程和视频教程。问题讨论请加qq群:Hacking (1群):303242737 Hacking (2群):147098303。
关注之后,回复请回复“Python”,获取更多内容。
本文转自玄魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/p/5714034.html,如需转载请自行联系原作者
相关文章:

20种看asp源码的方法及工具
作者:欧杨飘雪 http://blog.csdn.net/flyingsnowy/众所周知windows平台漏洞百出,补丁一个接一个,但总是补也补不净。我把我所知道的20种看asp源码的方法总结了一下,并且用c#写了个应用程序来扫描这些漏洞,发现虽然大…
关注度越来越高的行人重识别,有哪些热点?
来源 | HyperAI超神经责编 | Carol封图 | CSDN付费下载自视觉中国在茫茫人海中,你能不能一眼就找到想找的那个人?如今,这个任务对于计算机来说,可能是小菜一碟了。而这得益于近年行人重识别技术的飞速发展。行人重识别࿰…

《QTP自动化测试进阶》(1)
学习《QTP自动化测试进阶》第一章。 采用不同的项目开发模型对自动化测试有不同的影响。 (1)瀑布模型:瀑布模型在需求定义方面做得很好,这对自动化测试是有益的,包括可以尽早选择合适的自动化测试策略,让自…

JNDI概述(转载)
JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。那么,JNDI…
怎样用Python控制图片人物动起来?一文就能Get!
作者 | 李秋键责编 | 李雪敬头图 | CSDN 下载自视觉中国出品 | AI科技大本营(ID:rgznai100)引言:近段时间,一个让梦娜丽莎图像动起来的项目火遍了朋友圈。而今天我们就将实现让图片中的人物随着视频人物一起产生动作。…

Directx11教程(61) tessellation学习(3)
现在我们看看在不同tess factor的情况下,三角形是如何细分的?(这儿三条边和内部tess factor值是一样的,而且partitioning("integer")) 下面8张图是三角形在tess factor 1到8的情况下的细分细节: 因为TS阶段是硬件自己做…

HTML語法大全
作者:闪吧標籤 , 屬性名稱 , 簡介 <! - - ... - -> 註解 <!> 跑馬燈 <marquee>...</marquee>普通捲動 <marquee behaviorslide>...</marquee>滑動 <marquee behaviorscroll>...</marquee>預設捲動 <marquee beh…
php相关书籍视频
虽然如今web领域,PHP JSP .NET 并驾齐驱,但PHP用的最广,原因不用我多说。 首先发一个PHP手册,方便查询,这个肯定是学PHP必备的。 下载地址:http://u.115.com/file/aq3e5sv9PHP100的视频教程,这个…

你究竟了解多少HTML代码
作者:十二 文章来源: 蓝色理想今天想学习一下基础知识,就看了一下HTML(4.0),发现自己对HTML掌握的太少了。很多代码都很陌生,根本就没见过,更别提用了。就拿<a></a>元素来举个例子。它的属性…

Delphi 调用webservice接口
一、使用向导 1.导入wsdl文件:file--new----other----webservice---WSDLimporter---输入wsdl地址 http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl 完成之后,即可导入wsdl文件。 注:结尾处的?wsdl不能少。 2…
都是程序员,凭什么他能站在鄙视链的顶端?
在写代码、改bug之中,有时候会陷入焦虑:明年我还要继续这样的生活吗?程序员群体中有一条无形的鄙视链,最直观的表现就是薪资差异。在最新的调查报告中,全国范围内,程序员年薪达到 50 万以上的,仅…

软件开发经验总结(一)细节决定软件的成败
最近在公司做开发的时候,需要开发一个自动备份的功能,于是我想到了SQL SERVER备份调度功能,于是打开SQL SERVER 备份调度界面,想照样画葫芦做一个,然后20分钟就把该功能做出来。30分钟过去了,我的界面依然还没有做完,原来打算很快做完的界面却总是离目标…

简明 HTML CSS 开发规范
作者:wjack 文章来源: 蓝色理想//总论本规范既是一个开发规范,也是一个脚本语言参考,本规范并不是一个一成不变的必须严格遵守的条文,特殊情况下要灵活运用,做一定的变通。但是,请大家千万不…
B 站神曲damedane:精髓在于换脸,五分钟就能学会
导读:AI 换脸技术层出不穷,但一代更比一代强。最近,一个发表在 NeurIPs 2019 的 AI 换脸模型 first order motion model 火了起来,其表情迁移效果胜过同领域其它方法。最近,这项技术在 B 站引起一波新潮流……来源 | H…

html select以数组的方式提交
2019独角兽企业重金招聘Python工程师标准>>> 1).select 以数组的方式提交 <form> <input type"hidden" name"app" value"wap_test"> <select name"attribute[颜色]"> &…

META的一些功用
作者:军军 文章来源:闪吧 META的一些功用 META标记用于描述不包含在标准HTML里的一些文档信息。基于这一基 础上又开发出一些其它的有用功能,下面我挑选几种功能和大家说一下: 1、如何让搜索引擎搜索到你的页面 …
Python爬虫并自制新闻网站,太好玩了
来源 | 凹凸数据(ID:alltodata)我们总是在爬啊爬,爬到了数据难道只是为了做一个词云吗?当然不!这次我就利用flask为大家呈现一道小菜。Flask是python中一个轻量级web框架,相对于其他web框架来说…

CPU值满resmgr:cpu quantum造成的Oracle等待事件解决办法
cpu quantum造成的Oracle等待事件解决办法 不少接触数据库的朋友有一个困扰已久的问题——resmgr:cpu quantum。已经遇过不少次这种CPU突然全绿的情况,通过隐含参数屏蔽了一下,方便研究。 刚好有人问我这个问题,就干脆翻文档写一篇文章给这位…

讲解用户角色切换
方法一:有root密码,可以使用su - root切换到root下,为了安全起见,不建议使用,因为如果切换到root下,被人修改了root密码,就真的完蛋了.......方法二:通过sudo给普通用户授权…

HTML教程-各窗口间相互操作(Frame Target)
文章来源: 山西之窗由Frames分出来的几个窗口的内容并不是静止不变的,往往一个窗口的内容随着另一个窗口的要求而不断变化,这就提高了Frames的利用价值。为了完成各窗口之间的相互操作,我们必须为每一个窗口起一个名字,…

[转载] 晓说——第3期:梦回青楼 爱与自由的温柔乡(上)
转载于:https://www.cnblogs.com/6DAN_HUST/archive/2012/08/20/2647811.html
10个 Python 工程师,9个不合格!
毋庸置疑,Python越来越被认可为程序员新时代的风口语言。 无论是刚入门的程序员,还是年薪百万的 BATJ 的大牛都无可否认:Python的应用能力是成为一名码农大神的必要项。 所以,很多程序员把Python当做第一语言来学习。 但对于Pytho…

驱动07.USB驱动程序
1 了解USB识别的过程 eg:在Windows系统下的一个现象:把手机的USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能知道是"a…
豪气!华为放话:3年培养100万AI人才!网友神回应了
大家经常把BAT挂在嘴边,但是可能有些人还不知道,华为的体量早已超越了这三巨头,只是迟迟不肯上市。华为的创始人任正非曾说表:上不上市不重要,最重要的是要让中国华为的技术能够称霸全球!华为对技术的重视&…

InnoDB的启动,关闭,恢复
InnoDB存储引擎是MySQL的存储引擎之一,因此InnoDB存储引擎的启动和关闭更准确地是指在MySQL实例的启动过程中对InnoDB表存储引擎的处理过程。 参数innodb_fast_shutdown 在关闭时,参数innodb_fast_shutdown影响着表的存储引擎为InnoDB的行为。该参数可取…
微软推出提点神器动态ReLU,可能是最好的ReLU改进
作者 | Vincent 来源 | 晓飞的算法工程笔记 简介ReLU是深度学习中很重要的里程碑,简单但强大,能够极大地提升神经网络的性能。目前也有很多ReLU的改进版,比如Leaky ReLU和 PReLU,而这些改进版和原版的最终参数都是固定的。所以论…

监控 monit
官方说明文档 http://mmonit.com/monit/documentation/monit.html 实例 http://mmonit.com/wiki/Monit/ConfigurationExamples 下载最新软件包 wget http://mmonit.com/monit/dist/monit-5.4.tar.gz monit 介绍 monit是一个实用程序,用于在 Unix 系统上管理和监视…

框架窗口的尺寸设置
将窗口分割为几块,横向分用ROWS属性,纵向分用COLS属性,每一块的大小可以由这两个属性的值来实现。 <frameset cols#> 例:<frameset cols"100,200,300"> <frameset rows#> 例:<…

C语言双链表遍历,插入,删除
#include<stdio.h> #include<stdlib.h> #include <string.h> #define bzero(a, b) memset(a, 0, b)//windows平台下无bzero函数。 增加宏拓展移植性struct node{int data; //有效数据 struct node *pLast;//指向上一个节点的指针…

详解.NET的RAD功能
作者:中国计算机报Visual Studio.NET 拥有开发者建立一个成功而强大的中间层应用服务所需要的所有开发工具,利用这些工具,开发者可以: 1.保障消息传播和利用微软消息队列(MSMQ)跨平台的通讯; 2…