diff --git a/README.assets/overview.png b/README.assets/overview.png new file mode 100644 index 0000000..f090400 Binary files /dev/null and b/README.assets/overview.png differ diff --git a/README.md b/README.md index da49935..d00c9f6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,76 @@ # eaas-vde-proxy +## Overview + +![overview](README.assets/overview.png) + +## Pseudocode + +```python +class vde_proxy: + def handle_frame(frame): + try: + frame.mac = self.new_mac + except NameError: + self.new_mac = random_mac() + self.new_ip = do_dhcp(new_mac) + finally: + frame.mac = self.new_mac + frame.packet = handle_packet(frame.packet) + packet = frame.get_packet() + packet.ip = self.new_ip + + def handle_packet(packet): + protocols = { + "ip" : handle_ip, + "arp": handle_arp, + } + return protocols[packet.protocol](packet) + + def handle_ip(packet): + # Todo: Check DHCP lease and get new one if necessary + packet.ip = self.new_ip + if is_dhcp(packet): + packet = handle_dhcp(packet) + return packet + + def handle_arp(packet): + pass + + def handle_dhcp(packet): + pass + + def do_dhcp(mac): + # Do DHCP + return ip +``` + + + +## Problematic protocols + +Important: + +* DHCP +* ARP + +Nice to have: + +* NetBEUI / NetBIOS + +Keep in mind: + +* IPv6 (NDP, Interface Identifier, ...) +* IPSec +* 802.1X + +## Library support + +### Go: + +* Internet layer packet modification: https://github.com/google/gopacket / https://pkg.go.dev/github.com/google/gopacket +* Link layer frame modification: https://github.com/mdlayher/ethernet / https://pkg.go.dev/github.com/mdlayher/ethernet (not recently updated, alternative?) + +### Rust: + +* https://docs.rs/etherparse/0.9.0/etherparse