From 0787b2a5f00bdcbf2778f20d3da37646f69aef7e Mon Sep 17 00:00:00 2001 From: ValdikSS Date: Wed, 17 May 2017 21:44:19 +0300 Subject: [PATCH] Update README, Makefile and icon --- Makefile | 3 ++- README.md | 17 ++++++++++++++--- icon.ico | Bin 11454 -> 11744 bytes 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 15432af..a6ac70a 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,8 @@ TARGET = goodbyedpi.exe LIBS = -L $(WINDIVERTLIBS) -lWinDivert -lws2_32 CC = $(CPREFIX)-gcc CCWINDRES = $(CPREFIX)-windres -CFLAGS = -Wall -I $(WINDIVERTHEADERS) -L $(WINDIVERTLIBS) -O2 +CFLAGS = -Wall -I $(WINDIVERTHEADERS) -L $(WINDIVERTLIBS) \ + -O2 -fPIE -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 .PHONY: default all clean diff --git a/README.md b/README.md index 507ad08..c383a35 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,23 @@ It handles DPI connected using optical splitter or port mirroring (**Passive DPI Download [latest version from Releases page](https://github.com/ValdikSS/GoodbyeDPI/releases) and run. ``` -1: block passive DPI, 2: fragment outbound, 4: replace Host with hoSt, 8: remove space between host header and value +Usage: goodbyedpi.exe [OPTION...] + -p block passive DPI + -r replace Host with hoSt + -s remove space between host header and its value + -f [value] set HTTP fragmentation to value + -e [value] set HTTPS fragmentation to value + + -1 enables all options, -f 2 -e 2 (most compatible mode, default) + -2 enables all options, -f 2 -e 40 (better speed yet still compatible) + -3 all options except fragmentation (best speed) ``` -Try to run `goodbyedpi.exe 13` first. This enables 1, 4 and 8 options (1+4+8 = 13). +Try to run `goodbyedpi.exe` without any arguments first. If you can open blocked websites it means your ISP has DPI which can be circumvented. This is the slowest mode. -Run `goodbyedpi.exe 15` if this doesn't work. Fragmentation will cause slowdowns but it works in most cases. +Then try `goodbyedpi.exe -2`. It should be faster for HTTPS sites. + +Use `goodbyedpi.exe -3` if it works for your ISP's DPI. This is the fastest mode but not compatible with every DPI. # How does it work diff --git a/icon.ico b/icon.ico index 3e40fe0e303dc5e463b0df72909677871ae377e2..dc18d25fa7998953b7927d565dfdb980f5a17ff6 100644 GIT binary patch literal 11744 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 M+hr*5bf>`oA2%_nH2?qr