{"id":13775897,"url":"https://github.com/guyingbo/shadowproxy","last_synced_at":"2025-04-09T07:08:35.655Z","repository":{"id":44206805,"uuid":"45226768","full_name":"guyingbo/shadowproxy","owner":"guyingbo","description":"A proxy server that implements Socks5/Shadowsocks/Redirect/HTTP (tcp) and Shadowsocks/TProxy/Tunnel (udp) protocols.","archived":false,"fork":false,"pushed_at":"2020-08-05T06:06:06.000Z","size":232,"stargazers_count":186,"open_issues_count":5,"forks_count":45,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-04-24T12:18:20.003Z","etag":null,"topics":["proxy-server","shadowsocks","socks"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guyingbo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-30T03:24:02.000Z","updated_at":"2024-04-19T11:40:10.000Z","dependencies_parsed_at":"2022-08-19T19:30:56.639Z","dependency_job_id":null,"html_url":"https://github.com/guyingbo/shadowproxy","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guyingbo%2Fshadowproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guyingbo%2Fshadowproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guyingbo%2Fshadowproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guyingbo%2Fshadowproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guyingbo","download_url":"https://codeload.github.com/guyingbo/shadowproxy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247994121,"owners_count":21030050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["proxy-server","shadowsocks","socks"],"created_at":"2024-08-03T17:01:53.953Z","updated_at":"2025-04-09T07:08:35.636Z","avatar_url":"https://github.com/guyingbo.png","language":"Python","funding_links":[],"categories":["Python","\u003ca id=\"d03d494700077f6a65092985c06bf8e8\"\u003e\u003c/a\u003e工具"],"sub_categories":["\u003ca id=\"cb16466a31a167bb61f39e2a4a85f449\"\u003e\u003c/a\u003eShadowsocks"],"readme":"# Shadowproxy\n\n![Python package](https://github.com/guyingbo/shadowproxy/workflows/Python%20package/badge.svg?branch=master)\n[![Build Status](https://travis-ci.org/guyingbo/shadowproxy.svg?branch=master)](https://travis-ci.org/guyingbo/shadowproxy)\n[![Python Version](https://img.shields.io/pypi/pyversions/shadowproxy.svg)](https://pypi.python.org/pypi/shadowproxy)\n[![Version](https://img.shields.io/pypi/v/shadowproxy.svg)](https://pypi.python.org/pypi/shadowproxy)\n[![Format](https://img.shields.io/pypi/format/shadowproxy.svg)](https://pypi.python.org/pypi/shadowproxy)\n[![License](https://img.shields.io/pypi/l/shadowproxy.svg)](https://pypi.python.org/pypi/shadowproxy)\n[![Code Coverage](https://codecov.io/gh/guyingbo/shadowproxy/branch/master/graph/badge.svg)](https://codecov.io/gh/guyingbo/shadowproxy)\n[![Lines Of Code](https://tokei.rs/b1/github/guyingbo/shadowproxy?category=code)](https://github.com/guyingbo/shadowproxy)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n\n\n## Introduction\n\nA proxy server that implements Socks5/Shadowsocks/Redirect/HTTP (tcp) and Shadowsocks/TProxy/Tunnel (udp) protocols.\n\nThanks to Dabeaz's awesome [curio](https://github.com/dabeaz/curio) project.\n\nThis project is inspired by qwj's [python-proxy](https://github.com/qwj/python-proxy) project.\n\nIt is a replacement of shadowsocks and shadowsocks-libev, you can replace ss-redir, ss-tunnel, ss-server, ss-local with just one shadowproxy command.\n\n## Installation\n\nshadowproxy requires Python3.6+\n\ninstall with pip\n\n```\npip3 install shadowproxy\n```\n\nor run with docker, for example:\n\n```\ndocker run -it --rm -p 8000:8527 tensiongyb/shadowproxy -vv socks://:8527\n```\n\n## Features\n\n### supported protocols\n\nprotocol | server | client | scheme\n--- | --- | --- | ---\nsocks5 | ✓ | ✓ | socks://\nsocks4 | ✓ | ✓ | socks4://\nss | ✓ | ✓ | ss://\nss aead | ✓ | ✓ | ss://\nhttp connect | ✓ | ✓ | http://\nhttp forward |  | ✓ | forward://\ntransparent proxy | ✓ | | red://\ntunnel(udp) | ✓ | | tunneludp://\nss(udp) | ✓ | ✓ | ssudp://\n\n### supported plugins\n\nplugin | server | client\n--- | --- | ---\nhttp_simple | ✓ | ✓\ntls1.2_ticket_auth | ✓ | ✓\n\n### supported ciphers\n\n* aes-256-cfb\n* aes-128-cfb\n* aes-192-cfb\n* chacha20\n* salsa20\n* rc4\n* chacha20-ietf-poly1305\n* aes-256-gcm\n* aes-192-gcm\n* aes-128-gcm\n\n### other features\n\n* support both IPv4 and IPv6\n\nHere are some ipv6 url examples:\n\n```\nhttp://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html\nhttp://[1080:0:0:0:8:800:200C:417A]/index.html\nhttp://[3ffe:2a00:100:7031::1]\nhttp://[1080::8:800:200C:417A]/foo\nhttp://[::192.9.5.5]/ipng\nhttp://[::FFFF:129.144.52.38]:80/index.html\nhttp://[2010:836B:4179::836B:4179]\n```\n\n## Usage\n\n```\nusage: shadowproxy [-h] [-v] [--version] server [server ...]\n\nuri syntax:\n\n{scheme}://[{userinfo}@][hostname]:{port}[/?[plugin={p;args}][via={uri}][target={t}][source_ip={ip}]][#{fragment}]\n\nuserinfo = cipher:password or base64(cipher:password) when scheme is ss, ssudp\nuserinfo = username:password or base64(username:password) when scheme is socks, http.\n\n```\n\nexamples:\n\n```\n# simple shadowsocks server\nshadowproxy ss://chacha20:password@0.0.0.0:8888\n\n# ipv6 binding\nshadowproxy ss://chacha20:password@[::]:8888\n\n# socks5 --\u003e shadowsocks\nshadowproxy -v socks://:8527/?via=ss://aes-256-cfb:password@127.0.0.1:8888\n\n# http   --\u003e shadowsocks\nshadowproxy -v http://:8527/?via=ss://aes-256-cfb:password@127.0.0.1:8888\n\n# redir  --\u003e shadowsocks\nshadowproxy -v red://:12345/?via=ss://aes-256-cfb:password@127.0.0.1:8888\n\n# shadowsocks server (udp)\nshadowproxy -v ssudp://aes-256-cfb:password@:8527\n\n# tunnel --\u003e shadowsocks (udp)\nshadowproxy -v tunneludp://:8527/?target=8.8.8.8:53\u0026via=ssudp://aes-256-cfb:password@127.0.0.1:8888\n\n# tproxy --\u003e shadowsocks (udp)\nshadowproxy -v tproxyudp://:8527/?via=ssudp://aes-256-cfb:password@127.0.0.1:8888\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguyingbo%2Fshadowproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguyingbo%2Fshadowproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguyingbo%2Fshadowproxy/lists"}