{"id":13548453,"url":"https://github.com/xvzc/SpoofDPI","last_synced_at":"2025-04-02T21:31:31.253Z","repository":{"id":38951842,"uuid":"441833482","full_name":"xvzc/SpoofDPI","owner":"xvzc","description":"A simple and fast anti-censorship tool written in Go","archived":false,"fork":false,"pushed_at":"2024-09-19T12:33:21.000Z","size":13831,"stargazers_count":3933,"open_issues_count":52,"forks_count":268,"subscribers_count":34,"default_branch":"main","last_synced_at":"2025-04-01T22:23:35.414Z","etag":null,"topics":["anti-censorship","censorship-circumvention","censorship-free","deep-packet-inspection","dpi","dpi-bypassing","dpi-filtering","golang","proxy-server"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xvzc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"xvzc"}},"created_at":"2021-12-26T07:24:14.000Z","updated_at":"2025-03-31T14:30:46.000Z","dependencies_parsed_at":"2024-01-16T17:55:16.251Z","dependency_job_id":"3acf37b7-9745-4d13-aa4a-006fcc7ea54d","html_url":"https://github.com/xvzc/SpoofDPI","commit_stats":{"total_commits":258,"total_committers":9,"mean_commits":"28.666666666666668","dds":0.5193798449612403,"last_synced_commit":"31a96b1a53e7dc021cd7f27cc1c87d595c2e45f1"},"previous_names":["jerry901/spoofdpi","itworksnow/spoofdpi"],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvzc%2FSpoofDPI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvzc%2FSpoofDPI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvzc%2FSpoofDPI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xvzc%2FSpoofDPI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xvzc","download_url":"https://codeload.github.com/xvzc/SpoofDPI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246895764,"owners_count":20851324,"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":["anti-censorship","censorship-circumvention","censorship-free","deep-packet-inspection","dpi","dpi-bypassing","dpi-filtering","golang","proxy-server"],"created_at":"2024-08-01T12:01:10.587Z","updated_at":"2025-04-02T21:31:31.246Z","avatar_url":"https://github.com/xvzc.png","language":"Go","funding_links":["https://github.com/sponsors/xvzc"],"categories":["Go"],"sub_categories":[],"readme":"# SpoofDPI\n\nRead in other Languages: [🇬🇧English](https://github.com/xvzc/SpoofDPI), [🇰🇷한국어](https://github.com/xvzc/SpoofDPI/blob/main/_docs/README_ko.md), [🇨🇳简体中文](https://github.com/xvzc/SpoofDPI/blob/main/_docs/README_zh-cn.md), [🇷🇺Русский](https://github.com/xvzc/SpoofDPI/blob/main/_docs/README_ru.md), [🇯🇵日本語](https://github.com/xvzc/SpoofDPI/blob/main/_docs/README_ja.md)\n\nA simple and fast software designed to bypass **Deep Packet Inspection**.\n\n![image](https://user-images.githubusercontent.com/45588457/148035986-8b0076cc-fefb-48a1-9939-a8d9ab1d6322.png)\n\n# Installation\nSee the installation guide for SpoofDPI [here](https://github.com/xvzc/SpoofDPI/blob/main/_docs/INSTALL.md).\n\n\u003ca href=\"https://repology.org/project/spoofdpi/versions\"\u003e\n    \u003cimg src=\"https://repology.org/badge/vertical-allrepos/spoofdpi.svg?columns=1\" alt=\"Packaging status\"\u003e\n\u003c/a\u003e  \n\n# Usage\n```\nUsage: spoofdpi [options...]\n  -addr string\n        listen address (default \"127.0.0.1\")\n  -debug\n        enable debug output\n  -dns-addr string\n        dns address (default \"8.8.8.8\")\n  -dns-ipv4-only\n        resolve only version 4 addresses\n  -dns-port value\n        port number for dns (default 53)\n  -enable-doh\n        enable 'dns-over-https'\n  -pattern value\n        bypass DPI only on packets matching this regex pattern; can be given multiple times\n  -port value\n        port (default 8080)\n  -silent\n        do not show the banner and server information at start up\n  -system-proxy\n        enable system-wide proxy (default true)\n  -timeout value\n        timeout in milliseconds; no timeout when not given\n  -v    print spoofdpi's version; this may contain some other relevant information\n  -window-size value\n        chunk size, in number of bytes, for fragmented client hello,\n        try lower values if the default value doesn't bypass the DPI;\n        when not given, the client hello packet will be sent in two parts:\n        fragmentation for the first data packet and the rest\n```\n\u003e If you are using any vpn extensions such as Hotspot Shield in Chrome browser,\n  go to Settings \u003e Extensions, and disable them.\n\n### OSX\nRun `spoofdpi` and it will automatically set your proxy\n\n### Linux\nRun `spoofdpi` and open your favorite browser with proxy option\n```bash\ngoogle-chrome --proxy-server=\"http://127.0.0.1:8080\"\n```\n\n# How it works\n### HTTP\n Since most websites in the world now support HTTPS, SpoofDPI doesn't bypass Deep Packet Inspections for HTTP requests, However, it still serves proxy connection for all HTTP requests.\n\n### HTTPS\n Although TLS encrypts every handshake process, the domain names are still shown as plaintext in the Client hello packet.\n In other words, when someone else looks on the packet, they can easily guess where the packet is headed to.\n The domain name can offer significant information while DPI is being processed, and we can actually see that the connection is blocked right after sending Client hello packet.\n I had tried some ways to bypass this and found out that it seemed like only the first chunk gets inspected when we send the Client hello packet split into chunks.\n What SpoofDPI does to bypass this is to send the first 1 byte of a request to the server,\n and then send the rest.\n\n# Inspirations\n[Green Tunnel](https://github.com/SadeghHayeri/GreenTunnel) by @SadeghHayeri  \n[GoodbyeDPI](https://github.com/ValdikSS/GoodbyeDPI) by @ValdikSS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxvzc%2FSpoofDPI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxvzc%2FSpoofDPI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxvzc%2FSpoofDPI/lists"}