# 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)
            
    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:

* gopacket (~libpcap): 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)

### Rust:

* https://docs.rs/etherparse/0.9.0/etherparse
