{"id":19225051,"url":"https://github.com/oldnomad/picosocks5","last_synced_at":"2026-01-08T09:50:14.507Z","repository":{"id":150221606,"uuid":"132768680","full_name":"oldnomad/picosocks5","owner":"oldnomad","description":"Lightweight and simple SOCKS5 proxy server. This is a mirror, the main repository is on GitLab.","archived":false,"fork":false,"pushed_at":"2024-04-12T18:35:21.000Z","size":391,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-07T11:16:40.834Z","etag":null,"topics":["c","proxy","socks","socks5"],"latest_commit_sha":null,"homepage":"https://gitlab.com/oldnomad/picosocks5","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oldnomad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-05-09T14:26:22.000Z","updated_at":"2021-12-29T01:52:31.000Z","dependencies_parsed_at":"2023-04-11T12:33:23.906Z","dependency_job_id":null,"html_url":"https://github.com/oldnomad/picosocks5","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldnomad%2Fpicosocks5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldnomad%2Fpicosocks5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldnomad%2Fpicosocks5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldnomad%2Fpicosocks5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oldnomad","download_url":"https://codeload.github.com/oldnomad/picosocks5/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246679068,"owners_count":20816402,"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":["c","proxy","socks","socks5"],"created_at":"2024-11-09T15:13:52.048Z","updated_at":"2026-01-08T09:50:14.478Z","avatar_url":"https://github.com/oldnomad.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PicoSOCKS5: a lightweight and simple SOCKS5 proxy server\n[![pipeline status](https://gitlab.com/oldnomad/picosocks5/badges/master/pipeline.svg)](https://gitlab.com/oldnomad/picosocks5/commits/master)\n\nPicoSOCKS5 is a very simple and very lightweight SOCKS5 proxy server.\nIt is written in pure C and by default uses no extra libraries besides GLibc\nor any other POSIX-compatible runtime (such as `musl`).\n\n# License\n\nPicoSOCKS5 is licensed under GNU General Public License Version 3 (GPLv3).\nFor full text of the license see file [LICENSE.txt](LICENSE.txt) in the\nroot of the project.\n\nIn addition, linking to and/or using OpenSSL is allowed. This additional\npermission is required since recent OpenSSL license is considered by some\nto be incompatible with GPL.\n\n# Supported features\n\n- PicoSOCKS5 implements SOCKS5 ([RFC 1928](https://www.ietf.org/rfc/rfc1928.txt)).\n  Currently only `CONNECT` and `BIND` are supported, but `UDP ASSOCIATE`\n  may be implemented later.\n  Draft [SOCKS5a](https://datatracker.ietf.org/doc/draft-ietf-aft-socks-pro-v5/)\n  is partially taken into account, but not completely implemented.\n  Earlier versions of SOCKS (SOCKS4, SOCKS4a) are not implemented.\n  Draft [SOCKS6](https://datatracker.ietf.org/doc/draft-olteanu-intarea-socks-6/)\n  and other enhancements are not implemented.\n- PicoSOCKS5 implements username/password authentication for SOCKS5\n  ([RFC 1929](https://www.ietf.org/rfc/rfc1929.txt)).\n- PicoSOCKS5 implements CHAP authentication for SOCKS5\n  ([draft](https://www.ietf.org/archive/id/draft-ietf-aft-socks-chap-01.txt)),\n  including mutual authentication. PicoSOCKS5 can use external crypto libraries\n  (GnuTLS or OpenSSL), if available, or fall back to its own home-grown crypto\n  implementation.\n- PicoSOCKS5 supports incoming and outgoing connections both in IPv4 and\n  IPv6. In particular, it can accept requests to connect to IPv6 servers\n  from IPv4 clients, and vice versa, serving as a gateway for mechanism\n  described in [RFC 3089](https://www.ietf.org/rfc/rfc3089.txt).\n\n# Known disadvantages\n\n- User list for authentication (in the default password format) is kept\n  in memory, so PicoSOCKS5 doesn't work well for really large number of users.\n- There's currently no support for GSS-API authentication method\n  ([RFC 1961](https://www.ietf.org/rfc/rfc1961.txt)), required for full\n  SOCKS5 compliance.\n- SOCKS5 `BIND` request support relies on \"external\" interface addresses\n  specified in daemon configuration. Automatic interface selection is\n  difficult to implement portably.\n\n# Building PicoSOCKS5\n\nFor building PicoSOCKS5 you'll need:\n\n- GCC compiler. Any version supporting C99 will do (v4.8.4 or newer is\n  guaranteed to work). PicoSOCKS5 conforms to C99 standard, so it can be\n  ported to any compiler supporting it; however, if C11 or later\n  is supported, some of newer features may be used.\n\n- GLibc or compatible library (such as `musl`). PicoSOCKS5 uses POSIX.1-2017\n  (with XSI extensions) and following GNU extensions:\n\n  - `vsyslog(3)`.\n  - `getopt_long(3)`.\n  - `crypt_r(3)` and algorithm extensions for `crypt(3)` family.\n  - Format specifier `\"%m\"` in `printf(3)` family.\n  - Optionally, `getifaddrs(3)`. The program will compile without it,\n    but when it's available, additional functionality is enabled.\n  - If the program is compiled without external crypto libraries, it\n    will use home-grown crypto implementation, which uses following\n    extensions:\n    - Header `\u003cendian.h\u003e` (if available) and macros `htole32(x)` and\n      `le32toh(x)` defined in it. If there is no `\u003cendian.h\u003e` for\n      your platform, or if it doesn't define these macros, and you\n      want to avoid using external crypto, you'll have to define\n      these macros yourself and pass them in `CFLAGS`.\n    - Optionally, `getentropy(3)`. If this function is not available,\n      the program will use direct reading from `/dev/urandom`. If\n      either method fails at runtime, low-quality standard `rand(3)`\n      will be used instead.\n\n  So if you have another POSIX-compliant C runtime library that includes\n  these features, PicoSOCKS5 can be ported to it. In particular, PicoSOCKS5\n  is known to successfully build and run with `musl` (version 1.2.2).\n\n- For crypto implementation, PicoSOCKS5 can use GnuTLS or OpenSSL library.\n  Following features are used:\n\n  - Random bytes generation.\n  - MD5 hash and HMAC functions.\n\n  Without at least one of these libraries, PicoSOCKS5 will use\n  `getentropy(3)` (if available) or standard `rand(3)` (which is very\n  low quality), and a home-grown HMAC-MD5 implementation, which is not\n  provably secure. Also, internal HMAC-MD5 implementation needs macros\n  `htole32(x)` and `le32toh(x)` for converting 32-bit unsigned integers\n  between native (host) byte order and little-endian byte order. In many\n  systems these macros are defined in header file `\u003cendian.h\u003e`, but if\n  your system is not one of them, you'll have to define these macros\n  yourself and pass your definitions in `CFLAGS`.\n\n  If you have another library implementing random bytes generation\n  and HMAC-MD5, you can write a wrapper for it as described in\n  [docs/crypto-libs.md](docs/crypto-libs.md).\n\n- GNU Autoconf/Automake, and their dependencies. The project was built\n  initially using automake version 1.15, but version 1.14 is also known\n  to work.\n\n- If you want to build man pages, you'll also need [pandoc](https://pandoc.org/).\n\nFirst, get the latest sources and configure the project:\n\n```bash\ngit clone https://gitlab.com/oldnomad/picosocks5\ncd picosocks5\nautoreconf -f -i -Wall\n./configure\n```\n\nConfigure script supports option `with-crypto=\u003cMODULE\u003e`, which allows\nyou to specify which crypto library you want to use for CHAP authentication.\nPossible values are `yes` (default, use whatever is available), `gnutls`,\n`openssl`, and `no` (use internal implementation). It is possible to write\nyour own wrapper if you want to use some other library (see\n[documentation](docs/crypto-libs.md)).\n\nNext, build and install the daemon:\n\n```bash\nmake \u0026\u0026 sudo make install\n```\n\n# Using PicoSOCKS5\n\n```bash\npicosocks5 -u nobody -g nogroup -a authfile.txt \"*:1080\"\n```\n\nFor more information on running PicoSOCKS5 see file\n[src/picosocks5.md](src/picosocks5.md) or man page for _picosocks5_(8).\nShort summary of options is also available from command line:\n\n```bash\npicosocks5 --help\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foldnomad%2Fpicosocks5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foldnomad%2Fpicosocks5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foldnomad%2Fpicosocks5/lists"}