58 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| RFC1149
 | |
| =======
 | |
| This is an implementation of RFC1149 "IP over Avian Carrier", aiming for 100%
 | |
| RFC compability (in contrast to vRFC1149). It was written for testing quadro
 | |
| copters as an alternative to pigeon based avian carriers. But, because no
 | |
| printers were available at that time, USB sticks became the medium of transfer
 | |
| (see the "usbip" tunnel).
 | |
| 
 | |
| WARNING: THIS TUNNEL IS DYSFUNCTIONAL. Some parts actually work, but it lacks
 | |
|          the printing part. 
 | |
| 
 | |
| 
 | |
| Installation and requirements
 | |
| =============================
 | |
|  * tesseract-ocr
 | |
|  * imagemagick
 | |
|  * python-pyserial / lpr / cups ?
 | |
|  * python-pyudev
 | |
|  * python-scapy
 | |
| 
 | |
| 
 | |
| How it works
 | |
| ============
 | |
| Outgoing packets are converted into a hexadecimal representation with each
 | |
| octet seperated by a space. For fault detection a CRC32 checksum is appended to
 | |
| each packet. Before printing a packet, permission to print is requested from
 | |
| the user, so no paper is wasted on unwanted network traffic. A plus is that the
 | |
| user can act as a human firewall.
 | |
| 
 | |
| The printed packet has to be taped to one of the legs of the carrier, as
 | |
| specified in the RFC. On the other side of the connection, the packet is
 | |
| optically scanned and put back into the tunnel software. The current
 | |
| implementation is monitoring all UDEV events and waits for a flashdrive
 | |
| containing photographs of network packets. New pictures are prepared for
 | |
| scanning using imagemagick's convert and then fed into tesseract. Tesseract is
 | |
| configured to only recognize uppercase hex-characters. After scanning the crc32
 | |
| sum is checked. If it checks out the packet will be written to the TUN device as
 | |
| incoming network traffic.
 | |
| 
 | |
| Except for the printing part, the tunnel should be functional. Accepting and
 | |
| dropping packets, hex en-/decoding and checksumming is working. The only thing
 | |
| known to be missing is the printer connection. For that the method
 | |
| rfc1149.RFC1149.toPrint() needs to be implemented. The most straight forward
 | |
| approach would be using python's subprocess.Popen in connection with
 | |
| /usr/bin/lp and making the printer's name configurable.
 | |
| 
 | |
| 
 | |
| What could be done
 | |
| ==================
 | |
|  * get two printers, implement rfc1140.RFC1149.toPrinter()
 | |
| 
 | |
| 
 | |
| Licensing
 | |
| =========
 | |
| Written by Sebastian Lohff <seba@seba-geek.de>
 | |
| Published under the GPLv3 or later
 | |
| 
 |