README started
Ursprung
93b48c9297
Commit
fabae4938e
Binäre Datei nicht angezeigt.
Nachher Breite: | Höhe: | Größe: 20 KiB |
@ -1,2 +1,76 @@
|
|||||||
# eaas-vde-proxy
|
# 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
|
||||||
|
In neuem Issue referenzieren