이 소프트웨어는 특정 웹사이트에 대한 액세스를 차단하는 많은 인터넷 서비스 제공업체에서 발견되는 심층 패킷 검사 시스템을 우회하도록 설계되었습니다.
데이터를 차단하지 않고 요청된 대상보다 빠르게 응답하는 광 분배기 또는 포트 미러링( Passive DPI )을 사용하여 연결된 DPI와 순차적으로 연결된 Active DPI를 처리합니다.
Windows 7, 8, 8.1, 10 또는 11 에는 관리자 권한이 필요합니다.
이 스크립트는 DNS 해석기가 비표준 포트의 Yandex DNS로 리디렉션되는 권장 모드에서 GoodbyeDPI를 시작합니다(DNS 중독 방지).
작동한다면 — 축하합니다! 그대로 사용하거나 추가로 구성할 수 있습니다.
릴리스 페이지에서 최신 버전을 다운로드하고 실행하세요.
Usage: goodbyedpi.exe [OPTION...]
-p block passive DPI
-q block QUIC/HTTP3
-r replace Host with hoSt
-s remove space between host header and its value
-m mix Host header case (test.com -> tEsT.cOm)
-f set HTTP fragmentation to value
-k enable HTTP persistent (keep-alive) fragmentation and set it to value
-n do not wait for first segment ACK when -k is enabled
-e set HTTPS fragmentation to value
-a additional space between Method and Request-URI (enables -s, may break sites)
-w try to find and parse HTTP traffic on all processed ports (not only on port 80)
--port additional TCP port to perform fragmentation on (and HTTP tricks with -w)
--ip-id handle additional IP ID (decimal, drop redirects and TCP RSTs with this ID).
This option can be supplied multiple times.
--dns-addr redirect UDP DNS requests to the supplied IP address (experimental)
--dns-port redirect UDP DNS requests to the supplied port (53 by default)
--dnsv6-addr redirect UDPv6 DNS requests to the supplied IPv6 address (experimental)
--dnsv6-port redirect UDPv6 DNS requests to the supplied port (53 by default)
--dns-verb print verbose DNS redirection messages
--blacklist perform circumvention tricks only to host names and subdomains from
supplied text file (HTTP Host/TLS SNI).
This option can be supplied multiple times.
--allow-no-sni perform circumvention if TLS SNI can't be detected with --blacklist enabled.
--frag-by-sni if SNI is detected in TLS packet, fragment the packet right before SNI value.
--set-ttl activate Fake Request Mode and send it with supplied TTL value.
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
--auto-ttl [a1-a2-m] activate Fake Request Mode, automatically detect TTL and decrease
it based on a distance. If the distance is shorter than a2, TTL is decreased
by a2. If it's longer, (a1; a2) scale is used with the distance as a weight.
If the resulting TTL is more than m(ax), set it to m.
Default (if set): --auto-ttl 1-4-10. Also sets --min-ttl 3.
DANGEROUS! May break websites in unexpected ways. Use with care (or --blacklist).
--min-ttl minimum TTL distance (128/64 - TTL) for which to send Fake Request
in --set-ttl and --auto-ttl modes.
--wrong-chksum activate Fake Request Mode and send it with incorrect TCP checksum.
May not work in a VM or with some routers, but is safer than set-ttl.
--wrong-seq activate Fake Request Mode and send it with TCP SEQ/ACK in the past.
--native-frag fragment (split) the packets by sending them in smaller packets, without
shrinking the Window Size. Works faster (does not slow down the connection)
and better.
--reverse-frag fragment (split) the packets just as --native-frag, but send them in the
reversed order. Works with the websites which could not handle segmented
HTTPS TLS ClientHello (because they receive the TCP flow "combined").
--fake-from-hex Load fake packets for Fake Request Mode from HEX values (like 1234abcDEF).
This option can be supplied multiple times, in this case each fake packet
would be sent on every request in the command line argument order.
--fake-with-sni Generate fake packets for Fake Request Mode with given SNI domain name.
The packets mimic Mozilla Firefox 130 TLS ClientHello packet
(with random generated fake SessionID, key shares and ECH grease).
Can be supplied multiple times for multiple fake packets.
--fake-gen Generate random-filled fake packets for Fake Request Mode, value of them
(up to 30).
--fake-resend Send each fake packet value number of times.
Default: 1 (send each packet once).
--max-payload [value] packets with TCP payload data more than [value] won't be processed.
Use this option to reduce CPU usage by skipping huge amount of data
(like file transfers) in already established sessions.
May skip some huge HTTP requests from being processed.
Default (if set): --max-payload 1200.
LEGACY modesets:
-1 -p -r -s -f 2 -k 2 -n -e 2 (most compatible mode)
-2 -p -r -s -f 2 -k 2 -n -e 40 (better speed for HTTPS yet still compatible)
-3 -p -r -s -e 40 (better speed for HTTP and HTTPS)
-4 -p -r -s (best speed)
Modern modesets (more stable, more compatible, faster):
-5 -f 2 -e 2 --auto-ttl --reverse-frag --max-payload
-6 -f 2 -e 2 --wrong-seq --reverse-frag --max-payload
-7 -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload
-8 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload
-9 -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q (this is the default)
Note: combination of --wrong-seq and --wrong-chksum generates two different fake packets.
ISP의 DPI를 우회할 수 있는지 확인하려면 먼저 브라우저에서 "보안 DNS(HTTPS를 통한 DNS)" 옵션을 활성화하여 공급자가 DNS 응답을 오염시키지 않는지 확인하세요.
그런 다음 아무런 옵션 없이 goodbyedpi.exe
실행 파일을 실행하십시오. 작동한다면 — 축하합니다! 예를 들어 차단된 웹 사이트 목록이 알려져 있고 해당 국가에서 사용 가능한 경우 --blacklist
옵션을 사용하여 이를 그대로 사용하거나 추가로 구성할 수 있습니다.
공급자가 DNS 요청을 가로채는 경우 비표준 포트(예: Yandex DNS 77.88.8.8:1253
)에서 실행되는 공용 DNS 확인자에 --dns-addr
옵션을 사용하거나 세 번째 포트를 사용하여 HTTPS/TLS를 통해 DNS를 구성할 수 있습니다. 파티 응용 프로그램.
.cmd 스크립트를 확인하고 기본 설정 및 네트워크 조건에 따라 수정하세요.
대부분의 Passive DPI는 HTTP를 통해 차단된 웹 사이트에 액세스하려고 하면 HTTP 302 리디렉션을 보내고, HTTPS의 경우 TCP 재설정을 보내 대상 웹 사이트보다 빠르게 보냅니다. DPI에서 보낸 패킷에는 일반적으로 러시아 공급자에서 볼 수 있듯이 0x0000
또는 0x0001
과 동일한 IP 식별 필드가 있습니다. 이러한 패킷이 다른 웹사이트(검열 페이지)로 리디렉션되면 GoodbyeDPI에 의해 차단됩니다.
Active DPI는 속이기 더 까다롭습니다. 현재 소프트웨어는 Active DPI를 우회하기 위해 7가지 방법을 사용합니다.
Host
헤더를 hoSt
로 교체Host
헤더에서 헤더 이름과 값 사이의 공백 제거이러한 방법은 TCP 및 HTTP 표준과 완벽하게 호환되므로 웹사이트를 손상시키지 않아야 하지만 DPI 데이터 분류를 방지하고 검열을 우회하는 데 충분합니다. HTTP/1.1 사양에서는 허용되지만 추가 공간으로 인해 일부 웹 사이트가 손상될 수 있습니다(19.3 허용 응용 프로그램 참조).
프로그램은 Windows 필터링 플랫폼을 사용하여 필터를 설정하고 패킷을 사용자 공간으로 리디렉션하는 WinDivert 드라이버를 로드합니다. 콘솔 창이 표시되는 동안 실행되고 창을 닫으면 종료됩니다.
이 프로젝트는 GNU Make 및 mingw를 사용하여 빌드할 수 있습니다. 유일한 종속성은 WinDivert입니다.
x86 exe를 빌드하려면 다음을 실행하세요.
make CPREFIX=i686-w64-mingw32- WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/x86
그리고 x86_64의 경우:
make CPREFIX=x86_64-w64-mingw32- BIT64=1 WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/amd64
service_install_russia_blacklist.cmd
, service_install_russia_blacklist_dnsredir.cmd
및 service_remove.cmd
스크립트에서 예제를 확인하세요.
자신의 필요에 따라 수정하십시오.
Advanced Stream Detect
GoodbyeDPI와 호환되지 않습니다. 비활성화하세요.WinDivert를 이용해 주셔서 감사합니다 @basil00. 이것이 이 프로그램의 주요 부분이다.
모든 BlockCheck 기여자에게 감사드립니다. 이 유틸리티 없이는 DPI 동작을 이해하는 것이 불가능합니다.