Skip to main content

A forward and reverse socks over websocket server and client implementation in Python.

Project description

GitHub Actions Workflow Status Codecov Python Version PyPI - Version Docker Pulls License

Pywssocks

Pywssocks is a SOCKS proxy implementation over WebSocket protocol.

Overview

This tool allows you to securely expose SOCKS proxy services under Web Application Firewall (WAF) protection (forward socks), or enable clients to connect and serve as SOCKS proxy servers when they don't have public network access (reverse socks).

Main Diagram

For golang version, please check linksocks/linksocks.

Note: LinkSocks is implemented in Go and also ships with a thin Python binding. Pywssocks, however, is written entirely in pure Python (no C extensions) and remains minimally compatible with the latest linksocks protocol and feature set.

Features

  1. Both client and server modes, supporting command-line usage or library integration.
  2. Forward and reverse proxy capabilities.
  3. Round-robin load balancing for reverse proxy.
  4. SOCKS proxy authentication support.
  5. IPv6 over SOCKS5 support.
  6. UDP over SOCKS5 support.

Potential Applications

  1. Distributed HTTP backend.
  2. Bypassing CAPTCHA using client-side proxies.
  3. Secure intranet penetration, using CDN network.

Usage

As a tool

Forward Proxy:

# Server (WebSockets at port 8765, as network connector)
pywssocks server -t example_token

# Client (SOCKS5 at port 1080)
pywssocks client -t example_token -u ws://localhost:8765 -p 1080

Reverse Proxy:

# Server (WebSockets at port 8765, SOCKS at port 1080)
pywssocks server -t example_token -p 1080 -r

# Client (as network connector)
pywssocks client -t example_token -u ws://localhost:8765 -r

As a library

Forward Proxy:

import asyncio
from pywssocks import WSSocksServer, WSSocksClient

# Server
server = WSSocksServer(
    ws_host="0.0.0.0",
    ws_port=8765,
)
token = server.add_forward_token()
print(f"Token: {token}")
asyncio.run(server.start())

# Client
client = WSSocksClient(
    token="<token>",
    ws_url="ws://localhost:8765",
    socks_host="127.0.0.1",
    socks_port=1080,
)
asyncio.run(client.start())

Reverse Proxy:

import asyncio
from pywssocks import WSSocksServer, WSSocksClient

# Server
server = WSSocksServer(
    ws_host="0.0.0.0",
    ws_port=8765,
    socks_host="127.0.0.1",
    socks_port_pool=range(1024, 10240),
)
token, port = server.add_reverse_token()
print(f"Token: {token}\nPort: {port}")
asyncio.run(server.start())

# Client
client = WSSocksClient(
    token="<token>",
    ws_url="ws://localhost:8765",
    reverse=True,
)
asyncio.run(client.start())

Installation

Pywssocks requires python >= 3.8, and can be installed by:

pip install pywssocks

Pywssocks is also available via docker:

docker run --rm -it jackzzs/pywssocks --help

Documentation

Visit the documentation: https://pywssocks.zetx.tech

License

Pywssocks is open source under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pywssocks-1.5.0.tar.gz (46.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pywssocks-1.5.0-py3-none-any.whl (49.8 kB view details)

Uploaded Python 3

File details

Details for the file pywssocks-1.5.0.tar.gz.

File metadata

  • Download URL: pywssocks-1.5.0.tar.gz
  • Upload date:
  • Size: 46.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pywssocks-1.5.0.tar.gz
Algorithm Hash digest
SHA256 6073eb0a29257a91b16df0ef2fb3fc78a55f3a67dc564bfb490551c9a4e1b95e
MD5 19c969aa6b22afa12859a17f2c2ed1e2
BLAKE2b-256 c4729c6b536c9da28f4bbea7648c751e3364f07d47cb78d0ee4648326c38d673

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywssocks-1.5.0.tar.gz:

Publisher: pypi.yml on linksocks/pywssocks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pywssocks-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: pywssocks-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 49.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pywssocks-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a5227898af0124ffe1bbd3006b52299acf008df8d28417428c1f2cabbc479843
MD5 fd4a82b3c229d2580cb1ce9c66c57279
BLAKE2b-256 1dcec60abaaf59e61c19118576a8bb894a6e802013d715f684c378f705a60e7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pywssocks-1.5.0-py3-none-any.whl:

Publisher: pypi.yml on linksocks/pywssocks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page