39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| Ether2Any and PyTap
 | |
| ===================
 | |
| Ether2Any is a Python base class for writing arbitrary Ethernet/IP tunnels
 | |
| using a TUN/TAP device.
 | |
| 
 | |
| PyTap is a Python class for handling a TUN/TAP device. It exposes
 | |
| reading/writing to the device and abstracts a bit of the network configuration.
 | |
| 
 | |
| 
 | |
| Installation and requirements
 | |
| =============================
 | |
| Just put it somewhere and import it. For PyTaps network configuration
 | |
| functions you need /sbin/ifconfig.
 | |
| 
 | |
| 
 | |
| How to write an Ethernet/IP tunnel
 | |
| ==================================
 | |
| Writing a tunnel with this is rather easy. All you have to do is to create a
 | |
| class inheriting from Ether2Any and implement the method sendToNet().
 | |
| sendToNet() will be called for each incoming network packet. If you add extra
 | |
| sockets to the select loop via addSocket, sendToDev() needs to be implemented,
 | |
| which gets the socket with the new data. If you don't want to rely on select you
 | |
| are free to pass self.dev (which is a PyTap() instance) and call dev.write()
 | |
| whenever you like. Note that if you write invalid network packets on it, you may
 | |
| get an exception.
 | |
| 
 | |
| Afterwards you can instantiate your class and call the run() method to start
 | |
| your tunnel.
 | |
| 
 | |
| 
 | |
| What could be done
 | |
| ==================
 | |
|  * Builtin packet aggregation would be nice
 | |
|  * Various FIXMEs/TODOs
 | |
|  * Replace ifconfig with the ip utility
 | |
|  * Add plugin architecture to PyTap for traffic mangling
 | |
|  * setuptools/pypi dance
 | |
| 
 |