linux 怎么更新 8021q模块,在ubuntu14.04上实现收发VLAN(802.1Q)帧
關鍵詞 :
AVB, 802.1Q, VLAN, scapy,python,pycharm,uBuntu
目的:測試中需要測試7個網卡,獨立收、發802.1q的幀。
平臺:不限(目前在Ubuntu 14.04上實現,windows上沒有實現)
目前實現的配置:Ubuntu 14.04+Pycharm Community 2016.1+Python 2.7.6+scapy 2.3.2。
經過一番折騰,終于有結果了。過程很曲折,記錄下來,以備以后翻閱。
階段1:遠離windows
網上查閱,發現scapy可以實現通過網卡收、發幀,需要基于python。
開始是在windows 7上,Eclipse+PyDev,運行時提示:IPv6不支持,而且發現用scapy無法實現收發802.1q的幀。
經過網上查閱,發現該問題從2012年就有人提交了問題,scapy在windows下目前不支持ip v6的相關操作(后來的實現也沒有用到ipv6,而是用的ipv4)。
以后預計在scapy 3.0后會修改,不過會支持windows 10以后版本,windows 7不支持。
不過,不能收發802.1q幀的問題重點其實不在這里,而是windows不支持直接操作網卡。
所以,只好轉到Ubuntu。
階段2:遠離windows下的虛擬機
轉Ubuntu,第一想法是用虛擬機,我采用了virtualBox虛擬機,安裝了Ubuntu14.04LTS。
終端運行python,發現版本是2.7.6,符合要求。
安裝scapy。
安裝pycharm。
這時,可能會提示需要安裝相應版本的JDK,具體安裝另見“JDK的安裝”。
JDK是必需的,而且相應版本要安裝正確,pycham需要JDK 8.
pycharm下編輯python程序:發送802.1Q幀
from scapy.all import *
sendp(Ether(dst=“(目標網卡MAC地址)”,src="(發送源網卡MAC地址)")?/Dot1Q(vlan=1,id=3,prio=2,type=0x22f0))
網卡的MAC地址在windows下可以通過ping命令查到,在Ubuntu下也可以通過ping命令查詢到,也可以“系統設置”-“網絡”-“有線”-“硬件地址”,直接看到。
另準備一臺windows PC,安裝wireshark,可以監測到ubuntu發出來的802.1q幀。
但是如果再接一個網卡,我用的是UGREEN的USB2Eth網卡,問題就來了:同一時間只能有一個網卡發送成功。
經過查詢,VM中同一時間只能有一個網卡“橋接”方式有效,而我需要同時連接7個網卡呢。
所以,只好拋棄VM。
階段3:2個網卡Tx幀成功,Rx的幀無VLAN tag
幸好,有臺機器是uBuntu,還安裝了mate桌面(坑,找不到設置),雖然版本是12.04,經過周末2個多小時的升級過程,升級到了14.04,mate被抹掉了.
添加root用戶,重啟,登陸。
檢查python,版本是2.7.6,夠用.
安裝scapy,安裝JDK。
安裝pycharm。
重復前面的幀發送程序,從eth0發送,另一臺PC運行wireshark監測,成功。
修改前面的幀發送程序,從eth1發送,另一臺PC運行wireshark監測,成功。
pycharm下編輯python程序:接收802.1Q幀
from scapy.all import *
sniff(filter="ether proto 0x8100", prn=lambda x: x.show(), count=1,timeout=20)
運行程序監測接收數據,從另一臺PC運行ostinato發送802.1Q數據,發現接收的數據缺少4個VLAN tag字節(0x8100,priority,VLAN ID)。
階段4:找回缺失的VLAN tag
windows下用wireshark監測數據時,曾經出現過不顯示VLAN tag的問題,通過網卡的高級屬性,設置“Priority and VLAN tag”為disabled,就可以顯示VLAN tag。
還用這個思路,在ubuntu下不知道如何設置網卡屬性。
查閱結果發現,是linux kernel把VLAN tag給stripped(移除)了,因為它認為0x8100是標準的,沒有人需要該信息,可是我需要呀。
用tcpdump命令發現,監視到0x8100字樣的VLAN tag存在。
終于搜到一個帖子(如下,我加了一些安裝信息)提示安裝pcap或pcappy,因為它們采用和tcpdump同樣的方法:重建VLAN tag。
Does anyone know why scapy is unable to capture (parse?) the vlan frame, but tcpdump sees it fine ?
Based on RyPeck's answer and GuyHarris's advice, I now have a much better workaround:
a) Using http://sourceforge.net/projects/pylibpcap/
import pcap
conf.use_pcap=True
Linux下安裝pylibpcap模塊
1. 安裝libpcap
apt-get install libpcap-dev
2.安裝python的dev版,否則安裝pylibpcap出錯
apt-get install python-dev
3.安裝python pcap模塊
下載pylibpcap-0.6.2.tar.gz并解壓,執行python setup.py install
4. 去pylibpcap-0.6.2/examples執行測試腳本
python sniff.py eth0 'port80'
b) Using pcappy - which is can be installed with: pip install pcappy
import pcappy as pcap
conf.use_pcap=True
Now scapy shows the same vlan information as tcpdump, with all it's great parsing features intact!
安裝setuptools
wget https://bootstrap.pypa.io/ez_setup.py -0 - | python
easy_install -i https://pypi.python.org/pypi/pcappy pcappy (easy_install pcappy會出錯,缺省網址變了)
運行程序準備接收,從另一臺PC運行ostinato發送802.1Q數據。 帶VLAN tag字節(0x8100,priority,VLAN ID)的幀數據終于被收到了,而且兩個網卡都可以正常Tx & Rx了。
總結:
1. scapy對windows支持不好,尤其是windows7以下。
2. windows下很難以administrator權限操作網卡。
3. VM下只能有一個網卡作用于橋接方式。
4. 需要pcap或pcappy重建被linux kernel移除的VLAN tag。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。
總結
以上是生活随笔為你收集整理的linux 怎么更新 8021q模块,在ubuntu14.04上实现收发VLAN(802.1Q)帧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 思科 catalyst系列产品
- 下一篇: 在linux下载github代码,lin