You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Sebastian Lohff 77287d9e62
Licensed under GPLv3 or later, cleanup
12 years ago
tessconf added draft of rfc1149 printer support 12 years ago
.gitignore added draft of rfc1149 printer support 12 years ago
README README for RFC1149 12 years ago added draft of rfc1149 printer support 12 years ago Licensed under GPLv3 or later, cleanup 12 years ago



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()

Written by Sebastian Lohff <>
Published under the GPLv3 or later