NoDPI: A Python Utility for Bypassing Deep Packet Inspection

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

Updated on May 5, 2026
View on GitHub

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

  1. Download: Obtain the latest version for your operating system from the NoDPI Releases page.
  2. Unzip: Extract the contents of the downloaded archive.
  3. 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
    (The blacklist.txt file is used to specify domains for fragmentation. If not provided, the program looks for blacklist.txt in the current directory.)
  4. Configure Proxy: Set your browser or system proxy settings to 127.0.0.1:8881.
  5. 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:

  1. Python: Ensure you have Python 3.8 or higher installed. No additional third-party libraries are required.
  2. Clone Repository: Clone the GitHub repository: git clone https://github.com/GVCoder09/NoDPI.git
  3. Run: Navigate to the main directory and execute: python3 src/main.py
  4. Configure Proxy: Set your browser or system proxy settings to 127.0.0.1:8881.

Running in Docker

For containerized deployment:

  1. Install Docker: Make sure Docker is installed on your system.
  2. Clone Repository: git clone https://github.com/GVCoder09/NoDPI
  3. Build Container: Navigate to the NoDPI directory and run:
    sudo docker build -t nodpi-proxy .
  4. 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.txt

    This command starts NoDPI using a specified blacklist file.

  • Automatic Blocked Domain Detection:
    nodpi --autoblacklist

    This mode attempts to automatically detect and apply fragmentation to blocked domains.

  • Setting Custom Host and Port:
    nodpi --host 192.168.1.100 --port 8080

    Useful for integrating into specific network configurations.

  • Fragmentation Method:
    nodpi --fragment-method sni

    Choose between random (default) or sni fragmentation methods.

  • Adding to System Startup:
    nodpi --install

    This 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