Python黑帽编程3.0 第三章 网络接口层攻击基础知识

3.0 第三章 网络接口层攻击基础知识
首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止。
本节简单概述下OSI七层模型和TCP/IP四层模型之间的对应关系,最后是本章教程需要的几个核心Python模块。
3.0.1 TCP/IP分层模型
国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层完成数据传送服务,上面三层面向用户。
除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:

图2
四层模型和五层是现实世界中真实存在的,本系列教程遵循4层模型来写作。本章内容集中在网络接口层,实际对应到5层的数据链路层,因为硬件本身不是我们要关心的内容。之后的各章,都会出现这张图,希望引起你的重视。
3.0.2 数据链路层
在TCP/IP协议族中,数据链路层主要有三个目的:
1)为IP模块发送和接收数据
2)为ARP模块发送ARP请求和接收ARP应答
3)为RARP模块发送RARP请求和接收RARP应答
这里需要强调一点的是,arp和rarp协议我们将其划分在数据链路层,如果你把它当成网络层协议也无所谓,希望读者不要在这个问题上争论。提到数据传输,必须要谈我们的网络环境,就我本人目前能接触到的网络基本都是以太网。
以太网(Ether-net)是指 DEC 公司、Intel 公司和 Xerox 公司在 1982 年联合公布的一个标准,这个标准里面使用了一种称作 CSMA/CD 的接入方法。而 IEEE802 提供的标准集 802.3(还有一部分定义到了 802.2 中)也提供了一个 CSMA/CD 的标准。
这两个标准稍有不同,因此链路层数据帧的的封装格式也有所不同(数据帧中的地址为 MAC 地址):

图3
3.0.3 Scapy
Scapy的是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。它可以很容易地处理一些典型操作,比如端口扫描,tracerouting,探测,单元 测试,攻击或网络发现(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,tethereal,P0F等)。 最重要的他还有很多更优秀的特性——发送无效数据帧、注入修改的802.11数据帧、在WEP上解码加密通道(VOIP)、ARP缓存攻击(VLAN) 等,这也是其他工具无法处理完成的。
scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明。
使用pip安装scapy。
root@kali:/home/pycharm# pip install scapy

图4
Scapy可以单独使用,也可以在python中调用。
了解Scapy的基本使用和支持的方法,首先我们从终端启动scapy,进入交互模式。

图5
ls()显示scapy支持的所有协议。

ls()函数的参数还可以是上面支持的协议中的任意一个的类型属性,也可以是任何一个具体的数据包,如ls(TCP),ls(newpacket)等。

lsc()列出scapy支持的所有的命令。

conf:显示所有的配置信息。conf变量保存了scapy的配置信息。

help()显示某一命令的使用帮助,如help(sniff)。

show()显示指定数据包的详细信息。例如,这里我们先创建一个IP数据包,然后调用show方法。

sprintf()输出某一层某个参数的取值,如果不存在就输出”??”,具体的format格式是:%[[fmt][r],][layer[:nb].]field%,详细的使用参考<Security Power Tools>的146页。
%[[fmt][r],][layer[:nb].]field%
layer:协议层的名字,如Ether、IP、Dot11、TCP等。
filed:需要显示的参数。
nb:当有两个协议层有相同的参数名时,nb用于到达你想要的协议层。
r:是一个标志。当使用r标志时,意味着显示的是参数的原始值。例如,TCP标志中使用人类可阅读的字符串’SA’表示SYN和ACK标志,而其原始值是18.

我之前发过一篇文章《Python网络数据监听和过滤》,讲了python中数据包解析,Scapy数据监听的用法,大家可以作为参考。
3.0.4 小结
需要准备的基础知识不能全面罗列,你需要学习的内容和你个人目前的积累有关。希望各位同学不要放弃对基础知识的学习。
第3.1节《ARP缓存投毒攻击》已经在微信订阅号抢先发布,心急的同学进入订阅号(二维码在下方),从菜单“专栏”—>”Python黑帽编程”进入即可。
查看完整系列教程,请关注我的微信订阅号(xuanhun521,下方二维码),回复“python”。问题讨论请加qq群:Hacking (1群):303242737 Hacking (2群):147098303。

Python黑帽编程3.0 第三章 网络接口层攻击基础知识的更多相关文章
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- Python黑帽编程 4.0 网络互连层攻击概述
Python黑帽编程 4.0 网络互连层攻击概述 是时候重新温习下下面这张图了. 图2 本章的内容核心包含上图中的网络层和传输层.TCP/IP是整个网络协议体系中的核心,因为从这里开始,数据传输从局域 ...
- Python黑帽编程2.5 函数
Python黑帽编程2.5 函数 写了几节的基础知识,真心感觉有点力不从心.这块的内容说实话,看文档是最好的方式,本人的写作水平,真的是找不出更好的写法,头疼.简单带过和没写一样,写详细了和本系列教程 ...
- Python黑帽编程2.9 面向对象编程
Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...
- Python 黑帽编程大纲(变化中)
Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
- Python黑帽编程2.3 字符串、列表、元组、字典和集合
Python黑帽编程2.3 字符串.列表.元组.字典和集合 本节要介绍的是Python里面常用的几种数据结构.通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储.查询 ...
- Python黑帽编程2.4 流程控制
Python黑帽编程2.4 流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if …..else 先上一段代码: #!/usr/bin/python # - ...
随机推荐
- Duilib源码分析(二)控件构造器—CDialogBuilder
上一节了解了大体流程,但是界面控件元素是如何被加载.解析.构建.管理.控件消息如何处理的呢?接下来我们将结合控件构造器进行分析: CDialogBuilder:控件构造器,主要用以解析xml配置文件并 ...
- js简单的设置快捷键,hotkeys捕获键盘键和组合键的输入
设置快捷键 这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb). hotkeys on Githubhotkeys预览 创建 您将需要在您的系 ...
- 【Cocos2d-x for WP8 学习整理】(5)文字显示全整理
学习 Cocos2d-x 有一阵了,现在要做个小东西,第一步就遇到了文字展示的问题,于是想把可能遇到的问题统统整理一下.这一部分也不局限于wp8,全平台应该都是一个解决方案. 先在脑袋里大致想了一下, ...
- Andriod学习笔记5:通过NDK在C++中实现日志输出
开发环境 android studio 1.5.1 实现步骤 新建android项目 项目名称为AndroidCLog,选择Empty Activity模板,其他默认即可. 下载配置ndk 在项目上右 ...
- UWP Composition API - GroupListView(二)
还是先上效果图: 看完了上一篇UWP Composition API - GroupListView(一)的童鞋会问,这不是跟上一篇一样的吗??? 骗点击的?? No,No,其实相对上一个有更简单粗暴 ...
- flume+kafka+spark streaming整合
1.安装好flume2.安装好kafka3.安装好spark4.流程说明: 日志文件->flume->kafka->spark streaming flume输入:文件 flume输 ...
- JS(去掉前后空格或去掉所有空格)的用法
1. 去掉字符串前后所有空格: 代码如下: function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } 说明 ...
- Qt经典出错信息之undefined reference to `vtable for classname
原文链接:Qt经典出错信息之undefined reference to `vtable for classname 这个出错信息太常见了,用过Qt两个月以上的朋友基本上都能自己解决了,因为太经典了, ...
- SQL Server中的Merge关键字
本文转载地址:http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html 简介 Merge关键字是一个神奇的DML关键字.它在SQL ...
- Vue - 自定义指令
1.Vue.directive(id,definition)注册一个全局自定义指令,接收两个参数,指令ID以及定义对象 2.钩子函数:将作用域与DOM进行链接,链接函数用来创建可以操作DOM的指令 b ...