add proxy server code

This commit is contained in:
ading2210 2024-01-08 01:04:37 -05:00
parent dfd9a7a8ae
commit 953b6cb191
6 changed files with 75 additions and 10 deletions

5
.gitignore vendored
View file

@ -1,6 +1,3 @@
/client/build
/client/out
/client/cacert.pem
/client/libcurl.data
/srelay*
/websockify
/server/.venv

View file

@ -8,12 +8,13 @@ This is an experimental port of [libcurl](https://curl.se/libcurl/) to WebAssemb
- Support for up to TLS 1.3
## Building:
You can build this project by cloning this repo and running the following commands:
You can build this project by running the following commands:
```
git clone https://github.com/ading2210/libcurl.js
cd libcurl.js/client
./build.sh
```
Make sure you have emscripten, git, and the various C build tools installed.
Make sure you have emscripten, git, and the various C build tools installed. The build script will generate `client/out/libcurl.js`.
## Javascript API:
@ -33,15 +34,22 @@ document.addEventListener("libcurl_load", ()=>{
Once loaded, there will be a `window.libcurl` object which includes all the API functions.
### Making HTTP Requests
To make HTTP requests, use `libcurl.fetch`, which takes the same arguments as the browser's regular `fetch` function. Like the standard Fetch API, `libcurl.fetch` will also return a `Response` object.
### Making HTTP Requests:
To perform HTTP requests, use `libcurl.fetch`, which takes the same arguments as the browser's regular `fetch` function. Like the standard Fetch API, `libcurl.fetch` will also return a `Response` object.
```js
let r = await libcurl.fetch("https://ading.dev");
console.log(await r.text());
```
## Proxy Server:
The proxy server consists of a SOCKS5 proxy server behind a websocket TCP reverse proxy. Code for running this as a single program is planned.
The proxy server consists of a [SOCKS5 proxy server](https://github.com/Amaindex/asyncio-socks-server) behind a [websocket TCP proxy](https://github.com/novnc/websockify).
To host the proxy server, run the following commands:
```
git clone https://github.com/ading2210/libcurl.js
cd libcurl.js/server
./run.sh
```
## Copyright:
This project is licensed under the GNU AGPL v3.

View file

@ -4,7 +4,6 @@ set -e
INCLUDE_DIR="build/curl-wasm/include/"
LIB_DIR="build/curl-wasm/lib/"
CACERT_FILE="cacert.pem"
OUT_FILE="out/libcurl.js"
MODULE_FILE="out/libcurl_module.js"
WRAPPER_SOURCE="main.js"

43
server/main.py Normal file
View file

@ -0,0 +1,43 @@
import logging
import threading
import os
from asyncio_socks_server.app import SocksServer
from websockify.websocketproxy import WebSocketProxy
#start a socks5 proxy as well as websockify
def setup_logging(prefix):
stderr_handler = logging.StreamHandler()
stderr_handler.setLevel(logging.DEBUG)
log_formatter = logging.Formatter(prefix + "%(message)s")
stderr_handler.setFormatter(log_formatter)
root = logging.getLogger()
root.addHandler(stderr_handler)
root.setLevel(logging.INFO)
def start_websockify():
options = {
"listen_host": "127.0.0.1",
"listen_port": 6001,
"target_host": "127.0.0.1",
"target_port": 1080
}
server = WebSocketProxy(**options)
server.start_server()
def start_socks():
socks_app = SocksServer(
LISTEN_HOST="127.0.0.1",
LISTEN_PORT=1080
)
socks_app.run()
if __name__ == "__main__":
pid = os.fork()
if pid == 0:
setup_logging("[websockify] ")
start_websockify()
else:
start_socks()

2
server/requirements.txt Normal file
View file

@ -0,0 +1,2 @@
websockify
asyncio-socks-server

16
server/run.sh Executable file
View file

@ -0,0 +1,16 @@
#!/bin/bash
#install dependencies and run the proxy server
set -e
if [ ! -d ".venv" ]; then
python3 -m venv .venv
fi
source .venv/bin/activate
if ! python3 -c "import asyncio_socks_server, websockify" 2> /dev/null; then
pip3 install -r requirements.txt
fi
python3 main.py