Project

purr

0.02
No commit activity in last 3 years
No release in over 3 years
Smuggle TCP connections through HTTP
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.13
~> 0.1.0
~> 10.0
~> 3.0
~> 0.12

Runtime

~> 2.0.0
~> 1.0.5
 Project Readme

Purr

Gem Version Build Status Inline docs Code Climate codecov

Purr is a TCP-over-HTTP solution which consists:

  • a Rack-based web server implemented in Ruby
  • a desktop client application written in Go
  • a browser extension with the ability to interact with the client
  • a JS library functioning as the control interface of the extension (TODO)

Using Purr it's possible to "smuggle" any kind of TCP traffic (SSH, VNC, etc.) through an HTTP connection.

How it works

  1. Using the (FIXME: not yet implemented) frontend library, the extension triggers the Go client to listen on a local TCP port
  2. If a client application (VNC, SSH, etc.) connects to this local port, the Go client opens a HTTP upgrade request to the Rack server
  3. The Rack server parses the upgrade request and if everything is alright, responds back with a correct response
  4. The Go client establishes proxying between the local TCP port and the remote connection to the Rack server
  5. Based on the user-defined logic in the block passed to the Rack server, it opens a remote TCP connection
  6. The Rack server establishes proxying between the incoming request and the remote TCP connection
  7. The data flows freely in both directions

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/skateman/purr.

License

The application is available as open source under the terms of the MIT License.