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