vRFC1149 ======== This is an implementation of "IP over Avian Carrier", using tweets as virtualized avian carrier. Installation and requirements ============================= You need * tweepy >= 1.8 (https://github.com/tweepy/tweepy.git) * python-bytearray Each client needs a twitter account to tweet network packets and one account to follow for incoming network packets. If the tweets of each account are public, the accounts don't need to follow each other. Currently, only point to point connections are possible, as specified by RFC1149. How it works ============ The script needs one Twitter account. It registers the account via oAuth, so it becomes accessible (see Authorization) and then pull tweets from it via Twitter's streaming-API. Tweets are en-/decoded and (de-)fragmented using packaging helper (see Encoding). Incoming tweets are parsed as incoming traffic, outgoing traffic is fragmented, encoded and then tweeted. Authorization ~~~~~~~~~~~~~ The script needs to be associated with Twitter through oAuth. If it is started without credentials, it gives you a link to twitter.com with a generated token and then asks for a PIN. After entering the PIN the script is fully authorized to both tweet and read tweets. The ACCESS_KEY and ACCESS_SECRET are saved into conf_auth.py. If the script already has an ACCESS_KEY and ACCESS_SECRET you won't be asked for credentials again. Encoding ~~~~~~~~ A tweet's maximum length is 140 characters. One character for twitter is one unicode character, meaning that one character can encode 20 bits (current uncode range is 0x0-0x110000). In vRFC1149's implementation two bytes are encoded in each character, leaving 4 bit of each char for metadata (the header). Sadly twitter removes, mangles or augmentates some of the characters. For more information about this look into the comments in the source (phelper.UPHelper.reassembleBrokenChars()). An alternative approach is to just tweet everything plain, reducing the payload of a tweet to 138 bytes (2 bytes reserved for header). Nevertheless, twitter transforms certain characters (<,> to <, >), so a workarround is needed, too. All available packaging helpers can be found in phelper.py. Twitter API Limits ~~~~~~~~~~~~~~~~~~ Twitter allows each client to do 1000 tweets a day. When considering a continuous connection and a tweet size of 280 bytes, the average speed is about 3byte/s (273kb/day). Additional, twitter breaks down the 1000 tweets to an unspecified hourly limit. RFC1149 compability =================== This implementation of RFC1149 does not reach 100% compability, since the general tweet comes without a leg on which the message could be taped to. Also, no duct tape is used (no taping whatsoever). Regarding the encoding, one could write a packaging helper more compatible with the RFC's frame format (hexadecimal representation with seperated octets). As a side effect, it would reduce the payload of one tweet to 46 bytes. What could be done ================== * create network topologies with Twitter's "following" feature * support multiple clients * create a table of characters which are not "eaten" by twitter or what they get transformed to Licensing ========= Written by Sebastian Lohff Published under the GPLv3 or later