NoDPI: A Python Utility for Bypassing Deep Packet Inspection

Summary
NoDPI is an open-source Python utility designed to bypass Deep Packet Inspection (DPI), a technology often used by internet service providers to censor and filter traffic. It works by intelligently modifying network packets, making it harder for DPI systems to identify and block certain connections. This cross-platform tool provides a straightforward, easy-to-use solution for users seeking to circumvent internet censorship and access blocked web resources.
Repository Info
Tags
Click on any tag to explore related repositories
Introduction
NoDPI is an open-source Python utility engineered to circumvent Deep Packet Inspection (DPI), a common method used by internet service providers to monitor and filter network traffic. This tool aims to bypass censorship and restrictions by intelligently modifying network packets, making it harder for DPI systems to identify and block certain connections. Developed with a focus on ease of use, NoDPI provides a straightforward solution for accessing blocked web resources across various operating systems, including Windows, Linux, macOS, and Android.
The utility operates by launching a local proxy server that intercepts and fragments HTTPS ClientHello packets. This fragmentation, combined with a TLS version replacement, often causes DPI systems to ignore the traffic, effectively bypassing blocks. NoDPI is designed to be lightweight, does not collect user data, and requires no administrator rights, making it a secure and accessible option for enhancing internet freedom.
Installation
Getting started with NoDPI is straightforward. You can either download a pre-built executable or run it directly from the source code.
Using Pre-built Executables
- Download: Obtain the latest version for your operating system from the NoDPI Releases page.
- Unzip: Extract the contents of the downloaded archive.
- Run: Open your terminal or command prompt, navigate to the unzipped directory, and execute:
- Windows:
nodpi.exe --blacklist blacklist.txt - Linux/macOS:
./nodpi --blacklist ./blacklist.txt
blacklist.txtfile is used to specify domains for fragmentation. If not provided, the program looks forblacklist.txtin the current directory.) - Windows:
- Configure Proxy: Set your browser or system proxy settings to
127.0.0.1:8881. - Enjoy: You should now be able to access previously blocked sites. Remember to disable the proxy after closing NoDPI.
Running from Source Code
If you prefer to run NoDPI from its source:
- Python: Ensure you have Python 3.8 or higher installed. No additional third-party libraries are required.
- Clone Repository: Clone the GitHub repository:
git clone https://github.com/GVCoder09/NoDPI.git - Run: Navigate to the main directory and execute:
python3 src/main.py - Configure Proxy: Set your browser or system proxy settings to
127.0.0.1:8881.
Running in Docker
For containerized deployment:
- Install Docker: Make sure Docker is installed on your system.
- Clone Repository:
git clone https://github.com/GVCoder09/NoDPI - Build Container: Navigate to the
NoDPIdirectory and run:sudo docker build -t nodpi-proxy . - Run Container:
sudo docker run -d \ --name nodpi \ -p 8881:8881 \ -v $(pwd)/blacklist.txt:/tmp/nodpi/blacklist.txt \ nodpi-proxy \ --host 127.0.0.1 \ --port 8881 \ --blacklist /tmp/nodpi/blacklist.txt \ --quiet
Examples
NoDPI offers various command-line arguments to customize its behavior:
- Basic Usage with Blacklist:
nodpi --blacklist my_custom_blacklist.txtThis command starts NoDPI using a specified blacklist file.
- Automatic Blocked Domain Detection:
nodpi --autoblacklistThis mode attempts to automatically detect and apply fragmentation to blocked domains.
- Setting Custom Host and Port:
nodpi --host 192.168.1.100 --port 8080Useful for integrating into specific network configurations.
- Fragmentation Method:
nodpi --fragment-method sniChoose between
random(default) orsnifragmentation methods. - Adding to System Startup:
nodpi --installThis command adds NoDPI to your system's autostart (Windows Registry or Linux
systemd) for persistent operation.
For a full list of supported arguments, refer to the official documentation or run nodpi --help.
Why Use NoDPI?
NoDPI stands out as an effective tool for several compelling reasons:
- Open Source: The entire codebase is transparent and available for review, fostering trust and community contributions.
- Ease of Use: Designed for simplicity, NoDPI features an intuitive interface that requires no special technical knowledge or administrator rights to operate.
- Cross-Platform Compatibility: It runs seamlessly on Windows, Linux, and macOS, with a dedicated Android version available.
- No Data Collection: NoDPI prioritizes user privacy, explicitly stating that it does not collect or transmit any user data, nor does it interfere with system processes.
- Flexible Configuration: Supports custom blacklists, automatic blocked domain detection, and various fragmentation methods to adapt to different blocking scenarios.
- Logging Capabilities: Offers options for access and error logging, which can be useful for monitoring and troubleshooting.
- Corporate Network Integration: The utility can be integrated into corporate networks, providing censorship circumvention benefits beyond individual use.
Links
- GitHub Repository: https://github.com/GVCoder09/NoDPI
- Official Website & Documentation: https://gvcoder09.github.io/nodpi_site/
- Android Version (NoDPI4Android): https://github.com/GVCoder09/NoDPI4Android
- Alternatives: