网络开发 工具包

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

原版 https://www.winpcap.org/

以及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

http://openvswitch.org/

终于找到一个可用的东西了。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

协议的说明文档 https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.3.0.pdf

9、Ryu

https://osrg.github.io/ryu/

日本人开发的,读音貌似汉语的“流”。

10、mininet

http://mininet.org/

虚拟网络,搭建实验环境用的。但是我对这些东西不怎么感冒,还是喜欢物理机器环境,看得见摸得到,心里踏实,印象也深。不过环境太复杂的话,也就只能用这个了。

类似的洁癖也出现在docker,以及python那些虚拟环境上,我都懒得用,喜欢在真实的环境上下手,否则就像充气娃娃让人不踏实。总觉得把环境弄脏弄坏,重装几次,解决一些奇奇怪怪的冲突,这样才像是真的摸过这些东西。

11、 An Inside Look at OpenFlow

https://inside-openflow.com/

上述ovs系列虽然都有官网的文档,但是一下子很难看懂,还是这个网站讲的比较清晰。

12、OpenWrt

https://openwrt.org/

或者应该改名叫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,然后在图形界面上查看的。

猜你喜欢

转载自blog.csdn.net/xuq09/article/details/82857207