drunkdream / turbo-tunnel

๐Ÿš€Fast tcp/https/websocket/socks4/socks5/ssh/icmp/k8s tunnel serving as unified proxy server.
MIT License
98 stars 13 forks source link

turbo-tunnel on android as a client . #18

Open ingnelson opened 4 years ago

ingnelson commented 4 years ago

Hello .

will you create a android application to use it as a client to create the tunnel to the server (turbo-tunnel) ?

one more question: turbo-tunnel can use GET method and not CONNECT method to create the http tunneling ?

drunkdream commented 4 years ago
  1. Android client needs to pack python runtime in it, so there is no plan currently.
  2. I supposed to write a plugin to support GET/POST method, because http tunnel is not a long connection tunnel, which can not transport TCP data.
ingnelson commented 4 years ago

@drunkdream how possible create a shadowsock plugin in linux , so this way i can use go-shadowsocks2 on my android using TERMUX app (Linux Terminal) ?

Because my ISP firewall only allow GET or POST headers and the other limitation is my ISP provider blocks the connection if the server send more then 10,000 bytes on one request.

Can you help me to create that TUNNEL ? I will be glad to pay for your services.

Do you have Telegram ?

drunkdream commented 4 years ago

I'm writing a plugin named relay-tunnel, which can create a tunnel through http server. The principle is both sides of communication periodically visit http server to send or recv data to or from the other end . So it needs the user has a http server which can save data temporarily.

But the support for shadowsocks is not planned. Have you tried this project?

ingnelson commented 4 years ago

@drunkdream i will explain to you what i need :

  1. My ISP provider only let pass or allow GET method request without HTTP headers (example : Host , Connect etc), so only the first line.
  2. My ISP provider blocks the connection if the server send more then 10,000 bytes on one request. so the connection should be multiples connection and multiple request, maybe configure the server if the server send more that 9000 bytes close the connection and the client send other HTTP request to create a new connection ? or it'll require tricky job polling that 10K segments and reassembling them ?

At the and of the first line should end with \r\n ูŒูู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู‘ู‘ู‘ู‘ู’ู’ู’ู’ูููู’ูู\r\n\r\n

As you can see this http request do not finish with \r\n\r\n , it finish with \r\n ูŒูู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู‘ู‘ู‘ู‘ู’ู’ู’ู’ูููู’ูู\r\n\r\n this has NON-ASCII characters after the first \r\n + space , this NON-ASCII character is the trick to bypass the firewall

The HTTP should be like this:

GET #0=fown&method=1&down=15000# HTTP/1.1\r\n ูŒูู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู’ู‘ู‘ู‘ู‘ู’ู’ู’ู’ูููู’ูู\r\n\r\n

or

GET #123# HTTP/1.1\r\n\x20\xd9\x8c\xd9\x8f\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x91\xd9\x91\xd9\x91\xd9\x91\xd9\x92\xd9\x92\xd9\x92\xd9\x92\xd9\x8f\xd9\x8f\xd9\x8f\xd9\x92\xd9\x8f\xd9\x8f\r\n\r\n

So some guy create a connection using shadowsocks + a plugin , but he only let me try it one time , i know it works , and works on many countries around the world like this :

HTTP request on port 80 > Shadowsocks on port 443 > internet > HTTP server listen on port 80 > shadowsocks server listen on port 443

On wireshark program the connection looks like this :

4Full_request_and_response 1HTTP REQUEST 2NON-ASCII CHARACTERS 3HTTP RESPONSE

You can see the packet via WIRESHARK: quantumnica1.zip

Those screenshots are from a android app that create the tunnel like i told you, i just figurate how it works and i want to create the same connection.

Can you create connection like that using GET method , please ? or Can you modify this nex shadowsocks plugin to use only GET method for Downstream and GET method for Upstream ? https://github.com/Snawoot/httpierce/

Do you have Telegram ? i really need your help.

drunkdream commented 4 years ago

That looks like your ISP is so complicated, and I'm not familiar with golang. So I'm very sorry that I can't help you. Best wishes!