網路開發 工具包
1、抓包軟體
wireshark
2、抓包裝置
十幾年前有個hub來著,後來搬家被扔了,最近想用才後悔。淘寶上也不好找了,搜一下出來的都是usb集線器,只有搜尋中文哈勃才能出來一些老舊的二手裝置。居然發現了我扔掉的同款,已經破舊不堪了,記得我扔掉那個好新啊。也可以買網管交換機,自己配置映象埠。不過最方便的還是專用的抓包交換機,所有埠映象所有埠,免配置,插上就用。https://item.taobao.com/item.htm?spm=a230r.1.14.173.6653af064UjB5I&id=551025801066&ns=1&abbucket=8#detail 速康電子,沒怎麼聽說過,在淘寶上都很難搜尋到,但東西挺好用的,比普聯家的方便實惠,普聯的只能固定在某一個埠抓,還挺貴。
3、 NDIS驅動
Network Driver Interface Specification,windows下的網路驅動介面規範。 NDIS橫跨傳輸層/網路層/資料鏈路層。 定義了網絡卡或網絡卡驅動程式與上層協議驅動程式之間的通訊介面規範,遮蔽了底層物理硬體的不同,使上層的協議驅動程式可以和底層任何型號的網絡卡通訊。
https://github.com/Microsoft/Windows-driver-samples/tree/master/network/ndis/filter
http://www.cnblogs.com/LittleHann/p/4844874.html
http://read.pudn.com/downloads108/doc/444917/NDIS.pdf
不到萬不得已不想寫驅動,看起來就好麻煩,先留著吧。
4、 WinPcap
以及python的版本 https://pypi.python.org/pypi/WinPcapy
看起來好方便,可以抓包,發包,包括三層包和二層包,唯一的缺點是不能對原有的包進行丟棄或者修改。
類似的npcap https://github.com/nmap/npcap
5、 WinDivert
原版 https://reqrypt.org/windivert.html
python版 https://pypi.python.org/pypi/pydivert
可以抓包,可以發包,可以修改過濾原有包,不過貌似只能針對三層包進行操作。
6、 Raw socket
http://www.binarytides.com/raw-socket-programming-in-python-linux/
”Raw sockets allow a program or application to provide custom headers for the specific protocol(tcp ip) which are otherwise provided by the kernel/os network stack. In more simple terms its for adding custom headers instead of headers provided by the underlying operating system.Raw socket support is available natively in the socket api in linux. This is different from windows where it is absent (it became available in windows 2000/xp/xp sp1 but was removed later)”
挺好的一個東西,可惜windows下用不了。
7、Open vSwitch
終於找到一個可用的東西了。ovs可以理解為一臺軟體實現的交換機,就像window下橋接網絡卡那樣實現交換機的功能,不過高明之處在於他可以對交換機的規則進行定製。自帶命令ovs-ofctl,可以定製資料包的轉發規則,怎麼丟棄怎麼修改怎麼映象應有盡有。也可以將控制權交給一臺控制器,比如Ryu。交換機和控制器之間按照OpenFlow協議進行通訊和控制。
下面是最常用的兩個命令,ovs-vsctl用於建立虛擬機器,新增埠。ovs-ofctl用於定製轉發規則。
http://openvswitch.org/support/dist-docs/ovs-ofctl.8.txt
http://openvswitch.org/support/dist-docs/ovs-vsctl.8.txt
8、OpenFlow
9、Ryu
日本人開發的,讀音貌似漢語的“流”。
10、mininet
虛擬網路,搭建實驗環境用的。但是我對這些東西不怎麼感冒,還是喜歡物理機器環境,看得見摸得到,心裡踏實,印象也深。不過環境太複雜的話,也就只能用這個了。
類似的潔癖也出現在docker,以及python那些虛擬環境上,我都懶得用,喜歡在真實的環境上下手,否則就像充氣娃娃讓人不踏實。總覺得把環境弄髒弄壞,重灌幾次,解決一些奇奇怪怪的衝突,這樣才像是真的摸過這些東西。
11、 An Inside Look at OpenFlow
上述ovs系列雖然都有官網的文件,但是一下子很難看懂,還是這個網站講的比較清晰。
12、OpenWrt
或者應該改名叫LEDE了 https://lede-project.org/
ovs已經被移植到openwrt上了,所以如果在一臺路由器上跑的話,不知道能不能滿足效能要求。如果可以的話,就省了一臺巨大丑陋的PC。普聯的基本沒法用,記憶體和快閃記憶體都太小,外殼也廉價。還是喜歡極路由小巧方正的金屬外殼,看起來就規規矩矩的,不像其他的路由器張牙舞爪的樣子。
買了程式設計器,就等回來刷機了。
極路由壹有一款紅色外殼的,好漂亮。
路由器上面跑ovs和在PC機上還是有區別的,其中最主要的是PC機上的網絡卡是相互獨立的網路介面,只要沒有手工設定橋接,埠上的資料包收發就是相互隔離的。而路由器的板子上預設帶有交換機晶片,各個物理埠是通過這個交換機橋接在一起的。這就需要先在交換晶片上設定VLAN,每一個埠分配一個獨立的VLAN,從而將各個埠隔離開來。然後再把這些隔離後產生的虛擬埠新增進ovs進行橋接,最終達到對各個埠的openflow控制。也就是先拆開路由器本身的橋接,然後再經過ovs進行二次橋接,這樣各個埠的實際控制權才轉移到了ovs手裡,饒了一個大彎路。
上圖可以看出幾個有線埠是由內部的交換機控制的,WAN和LAN的隔離就是通過VLAN實現的,只WiFi埠是單獨的。
相關的內容可以看這裡https://lede-project.org/docs/user-guide/switch_configuration
還有這裡https://wiki.openwrt.org/doc/uci/network/switch
13、Ubuntu下安裝OVS
1)先看看自己有哪些網絡卡
dmesg | grep eth
2)配置網絡卡的引數
etc/network/interfaces
3)安裝OVS
14、OpenWrt下安裝OVS
1)通過VLAN隔離埠
在圖形介面上配置是這樣,其實我是先配置的etc/config/network,然後在圖形介面上檢視的。