linux 怎么更新 8021q模块,在ubuntu14.04上实现收发VLAN(802.1Q)帧
關(guān)鍵詞 :
AVB, 802.1Q, VLAN, scapy,python,pycharm,uBuntu
目的:測試中需要測試7個網(wǎng)卡,獨立收、發(fā)802.1q的幀。
平臺:不限(目前在Ubuntu 14.04上實現(xiàn),windows上沒有實現(xiàn))
目前實現(xiàn)的配置:Ubuntu 14.04+Pycharm Community 2016.1+Python 2.7.6+scapy 2.3.2。
經(jīng)過一番折騰,終于有結(jié)果了。過程很曲折,記錄下來,以備以后翻閱。
階段1:遠離windows
網(wǎng)上查閱,發(fā)現(xiàn)scapy可以實現(xiàn)通過網(wǎng)卡收、發(fā)幀,需要基于python。
開始是在windows 7上,Eclipse+PyDev,運行時提示:IPv6不支持,而且發(fā)現(xiàn)用scapy無法實現(xiàn)收發(fā)802.1q的幀。
經(jīng)過網(wǎng)上查閱,發(fā)現(xiàn)該問題從2012年就有人提交了問題,scapy在windows下目前不支持ip v6的相關(guān)操作(后來的實現(xiàn)也沒有用到ipv6,而是用的ipv4)。
以后預(yù)計在scapy 3.0后會修改,不過會支持windows 10以后版本,windows 7不支持。
不過,不能收發(fā)802.1q幀的問題重點其實不在這里,而是windows不支持直接操作網(wǎng)卡。
所以,只好轉(zhuǎn)到Ubuntu。
階段2:遠離windows下的虛擬機
轉(zhuǎn)Ubuntu,第一想法是用虛擬機,我采用了virtualBox虛擬機,安裝了Ubuntu14.04LTS。
終端運行python,發(fā)現(xiàn)版本是2.7.6,符合要求。
安裝scapy。
安裝pycharm。
這時,可能會提示需要安裝相應(yīng)版本的JDK,具體安裝另見“JDK的安裝”。
JDK是必需的,而且相應(yīng)版本要安裝正確,pycham需要JDK 8.
pycharm下編輯python程序:發(fā)送802.1Q幀
from scapy.all import *
sendp(Ether(dst=“(目標網(wǎng)卡MAC地址)”,src="(發(fā)送源網(wǎng)卡MAC地址)")?/Dot1Q(vlan=1,id=3,prio=2,type=0x22f0))
網(wǎng)卡的MAC地址在windows下可以通過ping命令查到,在Ubuntu下也可以通過ping命令查詢到,也可以“系統(tǒng)設(shè)置”-“網(wǎng)絡(luò)”-“有線”-“硬件地址”,直接看到。
另準備一臺windows PC,安裝wireshark,可以監(jiān)測到ubuntu發(fā)出來的802.1q幀。
但是如果再接一個網(wǎng)卡,我用的是UGREEN的USB2Eth網(wǎng)卡,問題就來了:同一時間只能有一個網(wǎng)卡發(fā)送成功。
經(jīng)過查詢,VM中同一時間只能有一個網(wǎng)卡“橋接”方式有效,而我需要同時連接7個網(wǎng)卡呢。
所以,只好拋棄VM。
階段3:2個網(wǎng)卡Tx幀成功,Rx的幀無VLAN tag
幸好,有臺機器是uBuntu,還安裝了mate桌面(坑,找不到設(shè)置),雖然版本是12.04,經(jīng)過周末2個多小時的升級過程,升級到了14.04,mate被抹掉了.
添加root用戶,重啟,登陸。
檢查python,版本是2.7.6,夠用.
安裝scapy,安裝JDK。
安裝pycharm。
重復(fù)前面的幀發(fā)送程序,從eth0發(fā)送,另一臺PC運行wireshark監(jiān)測,成功。
修改前面的幀發(fā)送程序,從eth1發(fā)送,另一臺PC運行wireshark監(jiān)測,成功。
pycharm下編輯python程序:接收802.1Q幀
from scapy.all import *
sniff(filter="ether proto 0x8100", prn=lambda x: x.show(), count=1,timeout=20)
運行程序監(jiān)測接收數(shù)據(jù),從另一臺PC運行ostinato發(fā)送802.1Q數(shù)據(jù),發(fā)現(xiàn)接收的數(shù)據(jù)缺少4個VLAN tag字節(jié)(0x8100,priority,VLAN ID)。
階段4:找回缺失的VLAN tag
windows下用wireshark監(jiān)測數(shù)據(jù)時,曾經(jīng)出現(xiàn)過不顯示VLAN tag的問題,通過網(wǎng)卡的高級屬性,設(shè)置“Priority and VLAN tag”為disabled,就可以顯示VLAN tag。
還用這個思路,在ubuntu下不知道如何設(shè)置網(wǎng)卡屬性。
查閱結(jié)果發(fā)現(xiàn),是linux kernel把VLAN tag給stripped(移除)了,因為它認為0x8100是標準的,沒有人需要該信息,可是我需要呀。
用tcpdump命令發(fā)現(xiàn),監(jiān)視到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并解壓,執(zhí)行python setup.py install
4. 去pylibpcap-0.6.2/examples執(zhí)行測試腳本
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會出錯,缺省網(wǎng)址變了)
運行程序準備接收,從另一臺PC運行ostinato發(fā)送802.1Q數(shù)據(jù)。 帶VLAN tag字節(jié)(0x8100,priority,VLAN ID)的幀數(shù)據(jù)終于被收到了,而且兩個網(wǎng)卡都可以正常Tx & Rx了。
總結(jié):
1. scapy對windows支持不好,尤其是windows7以下。
2. windows下很難以administrator權(quán)限操作網(wǎng)卡。
3. VM下只能有一個網(wǎng)卡作用于橋接方式。
4. 需要pcap或pcappy重建被linux kernel移除的VLAN tag。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。
總結(jié)
以上是生活随笔為你收集整理的linux 怎么更新 8021q模块,在ubuntu14.04上实现收发VLAN(802.1Q)帧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 思科 catalyst系列产品
- 下一篇: 用友T6库存管理中,入库单保存后在单据列