{"id":21561497,"url":"https://github.com/mc256/distributed_proxy_system","last_synced_at":"2025-08-15T17:09:49.459Z","repository":{"id":71837634,"uuid":"122804593","full_name":"mc256/Distributed_Proxy_System","owner":"mc256","description":"EECS4080 Project at York University. A distribute proxy system to circumvent content filtering firewall. Data units are randomly distributed to different proxies and routed though different paths to avoid detection, single points of failure, persisting connections, and bottlenecks.","archived":false,"fork":false,"pushed_at":"2019-10-23T00:29:36.000Z","size":119,"stargazers_count":13,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-11T23:42:44.614Z","etag":null,"topics":["distributed","eecs4080","proxy","socks5-server","york-university"],"latest_commit_sha":null,"homepage":"","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/mc256.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-25T04:20:54.000Z","updated_at":"2023-07-10T19:23:13.000Z","dependencies_parsed_at":"2023-11-24T14:45:10.783Z","dependency_job_id":null,"html_url":"https://github.com/mc256/Distributed_Proxy_System","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mc256/Distributed_Proxy_System","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mc256%2FDistributed_Proxy_System","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mc256%2FDistributed_Proxy_System/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mc256%2FDistributed_Proxy_System/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mc256%2FDistributed_Proxy_System/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mc256","download_url":"https://codeload.github.com/mc256/Distributed_Proxy_System/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mc256%2FDistributed_Proxy_System/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270602456,"owners_count":24614260,"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","status":"online","status_checked_at":"2025-08-15T02:00:12.559Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["distributed","eecs4080","proxy","socks5-server","york-university"],"created_at":"2024-11-24T09:24:02.506Z","updated_at":"2025-08-15T17:09:49.437Z","avatar_url":"https://github.com/mc256.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Distributed Anti-Interference Proxy System\n\nThis is a EECS4080 Project at York University. \n\nResearch Paper: **Junlin Chen and Uyen Trang Nguyen, A Robust Protocol for Circumventing Censoring Firewalls, 18th IEEE International Conference on Computer and Information Technology (CIT-2018), Halifax, Canada, July 30 - August 3, 2018.**\n\nDOI 10.1109/Cybermatics_2018.2018.00299\n\n\n## Compile \u0026 Run\n\nYou can compile this project using **cmake** or **makefile** in CentOS7. Please install [libev](https://github.com/enki/libev) before compile using \n```sh\nyum install libev libev-devel\n```\nTo run this program is very simple. But to be notices that, there are three mode of this program\n- Client Application ``./a.out client``\n- Server Application ``./a.out peer``\n- SOCKS5 Server ``./a.out socks5``\n\nThat's it!\n\n## Configuration\n\n### Client Application\nPlease use the ``client_settings.txt``. You can use space or line break to separate these values\n\n- Listen address\n- Listen port\n- Connection confirm password\n- List of the interfaces\n    - IP address\n    - Port\n    - Password\n\n\n### Server Application\nPlease use the ``peer_settings.txt``. You can use space or line break to separate these values\n\n- Connection confirm password\n- SOCKS5 server address\n- SOCKS5 server port\n- Fake HTTP response (Should be a *.jpg image)\n- List of the interfaces\n    - Listen address\n    - Port\n    - Password (Password should be all different)\n   \n### SOCKS Server\nPlease use the ``socks_settings.txt``. You can use space or line break to separate these values\n\n- Listen address\n- Listen port\n\n\n## Documentation\n\nSource Code Structure\n\n- **connection** \u003cbr /\u003e\nThis folder contains all the socket operation classes wrapped in a event-driven design.\n    - **Async_Accept**: creates listener. It can accept connection.\n    - **Async_Connect**: connects to a socket.\n    - **Async_Read**: reads from a socket.\n    - **Async_Write**: write to a socket.\n- **interface** \u003cbr /\u003e\nLets define that there are two faces that the client application and the server application have. \u003cbr /\u003e\nSuch that \u003cbr /\u003e\n``SOCKS Client \u003c---\u003e [A|Client Application|B] \u003c===\u003e [A|Server Application|B] \u003c---\u003e SOCKS Server \u003c---\u003e Internet``\n    - **Client_A**: handles the connection to SOCKS Client\n    - **Client_B**: handles the connection to Server Application\n    - **Peer_A**: handles the connection to Client Application\n    - **Peer_B**: handles the connection to SOCKS Server\n- **program** \u003cbr /\u003e\nWe need a program that can manage two interface for a program. \u003cbr /\u003e\n    - **Client_Core**: manages Client_A and Client_B (Client Application)\n    - **Peer_Core**: manages Peer_A and Peer_B (Server Application)\n    - **Socks_Core**: manages the SOCKS server, including all the files in ``./socks5/``.\n- **socks5** \u003cbr /\u003e\nSolely for SOCKS server \u003cbr /\u003e\n    - **Channel**: forwards SOCKS5 proxy traffic\n    - **Handshake**: takes care of the SOCKS5 handshake procedure.\n- **utility** \u003cbr /\u003e\nAll the tools that need for this project\u003cbr /\u003e\n    - **Command_Listener**: We can type command to the console. (But I did not implement this feature, UNUSED)\n    - **Container**: keeps important value while the program is running.\n    - **Encryption**: has all the encryption algorithm.\n    - **File_Streamer**: reads the file and sends to the socket.\n    - **Packet**: prepares the data being transmit over the proxy network.\n    - **Proxy_Peer**: stores the configuration of the interfaces of the server application.\n    - **Timeout_Listener**: listens a timeout event, refreshes the console, prints useful information.\n    \n    \n    \n    \n    \n    \n\n\n**Please read detailed documentation in header files**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmc256%2Fdistributed_proxy_system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmc256%2Fdistributed_proxy_system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmc256%2Fdistributed_proxy_system/lists"}