Skip to content
HTTP tunnel implementation using Twisted for passing through restrictive firewalls.
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
ashttp
LICENSE
README
ashttpc
ashttps
setup.py

README

It's an HTTP Tunnel, not Proxy or something else.. You need at least one Proxy,
Tunnel, Gateway to talk with server:

              +--------------------------------+
              |   +--------+      +--------+   |
  Client      |   | tunnel |      | tunnel |   |      Gateway
  Proxy    <------+        +------+        +------->  Tunnel
  Tunnel      |   | client |      | server |   |      Proxy
              |   +--------+      +--------+   |
   (A)        +--------------------------------+       (B)

If (A) supports talking with CONNECT and (B) is capable of serving it, this can
be used to pass TCP streams (e.g SSL, SSH) although traffic passed between
tunnel endpoints are not CONNECT packets. Actually you can change shape of data
(adding encryption, authentication or fake headers reformatting) in
alterResponse() and alteredRequest(). If the firewall which you're trying to
bypass, has some limitations on TCP connections, you might want to change
connection pool options too, otherwise probably it is better to turn it off
utterly.


Install
-------
`python setup.py install`


Usage
-----
See `ashttpc --help` or `ashttps --help` and provide proper arguments according
to your network setup.

Assuming on your server machine, you have some proxy server on port 3128, run
here:

`ashttps <server_port> -P 127.0.0.1:3128 -t -l t.log`

This will start server program listening on port <server_port> using twistd
daemonizer (switch -t) and passes `-l t.log` to it.

Then, on client machine run:

`ashttpc <client_port> <server_ip>:<server_port> -t`

Will launch client software listening on <client_port> and makes tunnel to
server. Softwares could use this tunnel now by using HTTP proxy
127.0.0.1:<client_port>
You can’t perform that action at this time.