网络协议分析实验作业
实验环境
Win11 虚拟机:Ubuntu22.04、ovs2.17.8、python3.10.2、scapy、PyQt5、libreport
VxLAN
关于VxLAN
传统的二层网络技术VLAN中使用VLAN tag域中的12bit作为VLAN ID仅能划分4096个相互隔离的虚拟二层网络, 无法满足大二层网络中隔离大量租户的需求。为实现数据中心虚拟机跨设备的灵活迁移,VxLAN 引入VxLAN ID标识 网络,占24bit,可以划分1600万个相互隔离的二层网络, 满足了大型数据中心的需求。并且VxLAN使用 MAC in UDP 的隧道封装方式, 可以实现原始二层报文在IP网络中的透明传输。
VXLAN(Virtual Extensible LAN)是一种网络虚拟化技术,用于扩展现有的以太网技术,以提供更大的可用网络地址空间和跨物理网络的虚拟隔离。
VXLAN 在数据中心网络中广泛应用,特别是在云计算环境中,以解决传统以太网的扩展性和虚拟化隔离的限制。
VXLAN 使用 24 位的虚拟网络标识符(VNI)来标识虚拟网络。它通过在现有的 IP 网络上封装以太网帧,使用 UDP 封装,在物理网络上传输虚拟网络流量。
VXLAN 技术的主要优点包括:
扩展性:VXLAN 提供了 16,777,216(2^24)个虚拟网络标识符(VNI),使得网络可以支持更多的虚拟网络。
隔离性:VXLAN 允许在共享物理网络上创建多个虚拟网络,实现虚拟机之间的逻辑隔离。
灵活性:VXLAN 可以在不修改物理网络的情况下部署,通过在现有 IP 网络上封装以太网帧,使得它适用于现有的网络基础设施。
兼容性:VXLAN 可以与现有的网络设备和协议兼容,包括以太网交换机、路由器和 IP 网络。
VxLAN本地网络搭建

使用VMware创建两个虚拟机,在每台虚拟机中创建两个网桥,一个作为控制层面一个作为数据平面,控制器平面的网桥利用eth0接口实现互通,而数据平面的网桥通过VxLAN实现互通。
配置主机 h1
1 | ovs-vsctl show |

主机h2的配置方式与h1基本一致
1 | # 创建网桥br0和br1。其中br1作为控制层面的网桥,br0作为数据层面的网桥 |

测试控制层面连通性, 登录主机1,向主机2发送6个ping包,ping网桥br1的IP。
1 | ping -c 6 192.168.128.11 |

测试两个主机数据层面的连通性。登录主机1,向主机2发送6个ping包,ping网桥br0的IP。目前两个主机的数据层面无法通信

搭建隧道让两个云主机的数据层面也能够通信, 登录主机1,创建VxLAN。远端IP设置为主机2中br1的IP。
1 | ovs-vsctl add-port br0 port0 -- set interface port0 type=vxlan options:remote_ip=192.168.128.22 |

登录主机2,创建VxLAN。远端IP设置为主机1中br1的IP。
1 | ovs-vsctl add-port br0 port0 -- set interface port0 type=vxlan options:remote_ip=192.168.128.11 |

在主机2启动tcpdump,并且利用-i参数指定监听网口,此处监听eth0
1 | tcpdump -i eth0 |
登录主机1,再次测试两个云主机数据层面的连通性。验证VxLAN是否起作用。可以看出创建VxLAN后主机数据层面之间也连通了。

查看主机2抓包结果。可以看出主机数据层面通过VxLAN隧道实现通信

使用 Scapy 和 PyQt5 实现 Sniffer
关于 pcap 格式
"pcap"是Packet Capture(数据包捕获)的缩写。它是一种用于捕获和分析网络数据包的标准文件格式和库。pcap文件格式是一种用于存储网络数据包捕获的二进制文件格式,它可以被多种网络分析工具和协议分析器所使用。
libpcap是一个常用的网络数据包捕获库,使用C语言编写,用于在Linux系统上进行网络数据包捕获和分析, 前文使用的tcpdump底层就是libpcap库。
WinPcap 是一个用于在 Windows 系统上进行网络数据包捕获的库,使用C++编写。从win10开始,微软已引入Npcap(Winpacp的一个分支)。
Pcapy 是基于libpcap的Python接口。
Scapy 是一个强大的python网络数据包处理库。