From 45df8bfb09fd92b46d0c85a10af91c7f282445a1 Mon Sep 17 00:00:00 2001 From: bol-van Date: Wed, 24 Sep 2025 16:21:59 +0300 Subject: [PATCH] update docs --- docs/readme.en.md | 210 ++++++++++++++++++++++---------------------- docs/readme.md | 219 ++++++++++++++++++++++++---------------------- 2 files changed, 220 insertions(+), 209 deletions(-) diff --git a/docs/readme.en.md b/docs/readme.en.md index 879cdb85..be456199 100644 --- a/docs/readme.en.md +++ b/docs/readme.en.md @@ -136,112 +136,116 @@ For BSD systems there is dvtws. Its built from the same source and has almost th nfqws takes the following parameters: ``` - @ ; read file for options. must be the only argument. other options are ignored. + @ ; read file for options. must be the only argument. other options are ignored. --debug=0|1 - --dry-run ; verify parameters and exit with code 0 if successful - --version ; print version and exit - --comment ; any text (ignored) + --dry-run ; verify parameters and exit with code 0 if successful + --version ; print version and exit + --comment ; any text (ignored) --qnum= - --daemon ; daemonize - --pidfile= ; write pid to file - --user= ; drop root privs - --uid=uid[:gid1,gid2,...] ; drop root privs - --bind-fix4 ; apply outgoing interface selection fix for generated ipv4 packets - --bind-fix6 ; apply outgoing interface selection fix for generated ipv6 packets - --wsize=[:] ; set window size. 0 = do not modify. OBSOLETE ! - --wssize=[:] ; set window size for server. 0 = do not modify. default scale_factor = 0. - --wssize-cutoff=[n|d|s]N ; apply server wsize only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N - --ctrack-timeouts=S:E:F[:U] ; internal conntrack timeouts for TCP SYN, ESTABLISHED, FIN stages, UDP timeout. default 60:300:60:60 - --ctrack-disable=[0|1] ; 1 or no argument disables conntrack - --ipcache-lifetime= ; time in seconds to keep cached hop count and domain name (default 7200). 0 = no expiration - --ipcache-hostname=[0|1] ; 1 or no argument enables ip->hostname caching - --hostcase ; change Host: => host: - --hostspell ; exact spelling of "Host" header. must be 4 chars. default is "host" - --hostnospace ; remove space after Host: and add it to User-Agent: to preserve packet size - --domcase ; mix domain case : Host: TeSt.cOm - --methodeol ; add '\n' before method and remove space after Host: - --synack-split=[syn|synack|acksyn] ; perform TCP split handshake : send SYN only, SYN+ACK or ACK+SYN - --orig-ttl= ; set TTL for original packets - --orig-ttl6= ; set ipv6 hop limit for original packets. by default ttl value is used - --orig-autottl=[[:[-]]|-] ; auto ttl mode for both ipv4 and ipv6. default: +5:3-64. "0:0-0" or "-" disables autottl. - --orig-autottl6=[[:[-]]|-] ; overrides --orig-autottl for ipv6 only - --orig-mod-start=[n|d|s]N ; apply orig TTL mod to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N - --orig-mod-cutoff=[n|d|s]N ; apply orig TTL mod to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N - --dup= ; duplicate original packets. send N dups before original. - --dup-replace=[0|1] ; 1 or no argument means do not send original, only dups - --dup-ttl= ; set TTL for dups - --dup-ttl6= ; set ipv6 hop limit for dups. by default ttl value is used - --dup-autottl=[[:[-]]|-] ; auto ttl mode for both ipv4 and ipv6. default: -1:3-64. "0:0-0" or "-" disables autottl. - --dup-autottl6=[[:[-]]|-] ; overrides --dup-autottl for ipv6 only - --dup-fooling=[,] ; can use multiple comma separated values. modes : none md5sig badseq badsum datanoack hopbyhop hopbyhop2 - --dup-ts-increment= ; ts fooling TSval signed increment for dup. default -600000 - --dup-badseq-increment= ; badseq fooling seq signed increment for dup. default -10000 - --dup-badack-increment= ; badseq fooling ackseq signed increment for dup. default -66000 - --dup-start=[n|d|s]N ; apply dup to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N - --dup-cutoff=[n|d|s]N ; apply dup to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N - --dpi-desync=[,][,] ; try to desync dpi state. modes : synack fake fakeknown rst rstack hopbyhop destopt ipfrag1 multisplit multidisorder fakedsplit hostfakesplit fakeddisorder ipfrag2 udplen tamper - --dpi-desync-fwmark= ; override fwmark for desync packet. default = 0x40000000 (1073741824) - --dpi-desync-ttl= ; set ttl for desync packet - --dpi-desync-ttl6= ; set ipv6 hop limit for desync packet. by default ttl value is used. - --dpi-desync-autottl=[[:[-]]|-] ; auto ttl mode for both ipv4 and ipv6. default: -1:3-20. "0:0-0" or "-" disables autottl. - --dpi-desync-autottl6=[[:[-]]|-] ; overrides --dpi-desync-autottl for ipv6 only - --dpi-desync-fooling=[,] ; can use multiple comma separated values. modes : none md5sig ts badseq badsum datanoack hopbyhop hopbyhop2 - --dpi-desync-repeats= ; send every desync packet N times - --dpi-desync-skip-nosni=0|1 ; 1(default)=do not act on ClientHello without SNI (ESNI ?) - --dpi-desync-split-pos=N|-N|marker+N|marker-N ; comma separated list of split positions - ; markers: method,host,endhost,sld,endsld,midsld,sniext - ; full list is only used by multisplit and multidisorder - ; fakedsplit/fakeddisorder use first l7-protocol-compatible parameter if present, first abs value otherwise - --dpi-desync-split-seqovl=N|-N|marker+N|marker-N ; use sequence overlap before first sent original split segment - --dpi-desync-split-seqovl-pattern=|0xHEX ; pattern for the fake part of overlap - --dpi-desync-fakedsplit-pattern=|0xHEX ; fake pattern for fakedsplit/fakeddisorder - --dpi-desync-fakedsplit-mod=mod[,mod] ; mods can be none,altorder=0|1|2|3 - --dpi-desync-hostfakesplit-midhost=marker+N|marker-N ; additionally split real hostname at specified marker. must be within host..endhost or won't be splitted. - --dpi-desync-hostfakesplit-mod=mod[,mod] ; can be none, host=, altorder=0|1 - --dpi-desync-ipfrag-pos-tcp=<8..9216> ; ip frag position starting from the transport header. multiple of 8, default 8. - --dpi-desync-ipfrag-pos-udp=<8..9216> ; ip frag position starting from the transport header. multiple of 8, default 32. - --dpi-desync-ts-increment= ; ts fooling TSval signed increment. default -600000 - --dpi-desync-badseq-increment= ; badseq fooling seq signed increment. default -10000 - --dpi-desync-badack-increment= ; badseq fooling ackseq signed increment. default -66000 - --dpi-desync-any-protocol=0|1 ; 0(default)=desync only http and tls 1=desync any nonempty data packet - --dpi-desync-fake-tcp-mod=mod[,mod] ; comma separated list of tcp fake mods. available mods : none,seq - --dpi-desync-fake-http=|0xHEX ; file containing fake http request - --dpi-desync-fake-tls=|0xHEX|![+offset] ; file containing fake TLS ClientHello (for https). '!' = standard fake - --dpi-desync-fake-tls-mod=mod[,mod] ; comma separated list of TLS fake mods. available mods : none,rnd,rndsni,sni=,dupsid,padencap - --dpi-desync-fake-unknown=|0xHEX ; file containing unknown protocol fake payload - --dpi-desync-fake-syndata=|0xHEX ; file containing SYN data payload - --dpi-desync-fake-quic=|0xHEX ; file containing fake QUIC Initial - --dpi-desync-fake-wireguard=|0xHEX ; file containing fake wireguard handshake initiation - --dpi-desync-fake-dht=|0xHEX ; file containing fake DHT (d1..e) - --dpi-desync-fake-discord=|0xHEX ; file containing fake Discord voice connection initiation packet (IP Discovery) - --dpi-desync-fake-stun=|0xHEX ; file containing fake STUN message - --dpi-desync-fake-unknown-udp=|0xHEX ; file containing unknown udp protocol fake payload - --dpi-desync-udplen-increment= ; increase or decrease udp packet length by N bytes (default 2). negative values decrease length. - --dpi-desync-udplen-pattern=|0xHEX ; udp tail fill pattern - --dpi-desync-start=[n|d|s]N ; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N - --dpi-desync-cutoff=[n|d|s]N ; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N - --hostlist= ; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply if not prefixed with `^`, gzip supported, multiple hostlists allowed) - --hostlist-domains= ; comma separated fixed domain list - --hostlist-exclude= ; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply if not prefixed with `^`, gzip supported, multiple hostlists allowed) - --hostlist-exclude-domains= ; comma separated fixed domain list - --hostlist-auto= ; detect DPI blocks and build hostlist automatically - --hostlist-auto-fail-threshold= ; how many failed attempts cause hostname to be added to auto hostlist (default : 3) - --hostlist-auto-fail-time= ; all failed attemps must be within these seconds (default : 60) - --hostlist-auto-retrans-threshold= ; how many request retransmissions cause attempt to fail (default : 3) - --hostlist-auto-debug= ; debug auto hostlist positives - --new ; begin new strategy (new profile) - --skip ; do not use this profile - --filter-l3=ipv4|ipv6 ; L3 protocol filter. multiple comma separated values allowed. - --filter-tcp=[~]port1[-port2]|* ; TCP port filter. ~ means negation. setting tcp and not setting udp filter denies udp. comma separated list supported. - --filter-udp=[~]port1[-port2]|* ; UDP port filter. ~ means negation. setting udp and not setting tcp filter denies tcp. comma separated list supported. - --filter-l7= ; L6-L7 protocol filter. multiple comma separated values allowed. proto: http tls quic wireguard dht discord stun unknown - --filter-ssid=ssid1[,ssid2,ssid3,...] ; per profile wifi SSID filter - --ipset= ; ipset include filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) - --ipset-ip= ; comma separated fixed subnet list - --ipset-exclude= ; ipset exclude filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) - --ipset-exclude-ip= ; comma separated fixed subnet list -``` + --daemon ; daemonize + --pidfile= ; write pid to file + --user= ; drop root privs + --uid=uid[:gid1,gid2,...] ; drop root privs + --bind-fix4 ; apply outgoing interface selection fix for generated ipv4 packets + --bind-fix6 ; apply outgoing interface selection fix for generated ipv6 packets + --wsize=[:] ; set window size. 0 = do not modify. OBSOLETE ! + --wssize=[:] ; set window size for server. 0 = do not modify. default scale_factor = 0. + --wssize-cutoff=[n|d|s]N ; apply server wsize only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N + --ctrack-timeouts=S:E:F[:U] ; internal conntrack timeouts for TCP SYN, ESTABLISHED, FIN stages, UDP timeout. default 60:300:60:60 + --ctrack-disable=[0|1] ; 1 or no argument disables conntrack + --ipcache-lifetime= ; time in seconds to keep cached hop count and domain name (default 7200). 0 = no expiration + --ipcache-hostname=[0|1] ; 1 or no argument enables ip->hostname caching + --hostcase ; change Host: => host: + --hostspell ; exact spelling of "Host" header. must be 4 chars. default is "host" + --hostnospace ; remove space after Host: and add it to User-Agent: to preserve packet size + --domcase ; mix domain case : Host: TeSt.cOm + --methodeol ; add '\n' before method and remove space after Host: + --synack-split=[syn|synack|acksyn] ; perform TCP split handshake : send SYN only, SYN+ACK or ACK+SYN + --orig-ttl= ; set TTL for original packets + --orig-ttl6= ; set ipv6 hop limit for original packets. by default ttl value is used + --orig-autottl=[[:[-]]|-] ; auto ttl mode for both ipv4 and ipv6. default: +5:3-64. "0:0-0" or "-" disables autottl. + --orig-autottl6=[[:[-]]|-] ; overrides --orig-autottl for ipv6 only + --orig-mod-start=[n|d|s]N ; apply orig TTL mod to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N + --orig-mod-cutoff=[n|d|s]N ; apply orig TTL mod to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N + --dup= ; duplicate original packets. send N dups before original. + --dup-replace=[0|1] ; 1 or no argument means do not send original, only dups + --dup-ttl= ; set TTL for dups + --dup-ttl6= ; set ipv6 hop limit for dups. by default ttl value is used + --dup-autottl=[[:[-]]|-] ; auto ttl mode for both ipv4 and ipv6. default: -1:3-64. "0:0-0" or "-" disables autottl. + --dup-autottl6=[[:[-]]|-] ; overrides --dup-autottl for ipv6 only + --dup-fooling=[,] ; can use multiple comma separated values. modes : none md5sig badseq badsum datanoack hopbyhop hopbyhop2 + --dup-ts-increment= ; ts fooling TSval signed increment for dup. default -600000 + --dup-badseq-increment= ; badseq fooling seq signed increment for dup. default -10000 + --dup-badack-increment= ; badseq fooling ackseq signed increment for dup. default -66000 + --dup-start=[n|d|s]N ; apply dup to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N + --dup-cutoff=[n|d|s]N ; apply dup to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N + --dpi-desync=[,][,] ; try to desync dpi state. modes : synack fake fakeknown rst rstack hopbyhop destopt ipfrag1 multisplit multidisorder fakedsplit hostfakesplit fakeddisorder ipfrag2 udplen tamper + --dpi-desync-fwmark= ; override fwmark for desync packet. default = 0x40000000 (1073741824) + --dpi-desync-ttl= ; set ttl for desync packet + --dpi-desync-ttl6= ; set ipv6 hop limit for desync packet. by default ttl value is used. + --dpi-desync-autottl=[[:[-]]|-] ; auto ttl mode for both ipv4 and ipv6. default: -1:3-20. "0:0-0" or "-" disables autottl. + --dpi-desync-autottl6=[[:[-]]|-] ; overrides --dpi-desync-autottl for ipv6 only + --dpi-desync-fooling=[,] ; can use multiple comma separated values. modes : none md5sig ts badseq badsum datanoack hopbyhop hopbyhop2 + --dpi-desync-repeats= ; send every desync packet N times + --dpi-desync-skip-nosni=0|1 ; 1(default)=do not act on ClientHello without SNI (ESNI ?) + --dpi-desync-split-pos=N|-N|marker+N|marker-N ; comma separated list of split positions + ; markers: method,host,endhost,sld,endsld,midsld,sniext + ; full list is only used by multisplit and multidisorder + ; fakedsplit/fakeddisorder use first l7-protocol-compatible parameter if present, first abs value otherwise + --dpi-desync-split-seqovl=N|-N|marker+N|marker-N ; use sequence overlap before first sent original split segment + --dpi-desync-split-seqovl-pattern=[+ofs]@|0xHEX ; pattern for the fake part of overlap + --dpi-desync-fakedsplit-pattern=[+ofs]@|0xHEX ; fake pattern for fakedsplit/fakeddisorder + --dpi-desync-fakedsplit-mod=mod[,mod] ; mods can be none,altorder=0|1|2|3 + --dpi-desync-hostfakesplit-midhost=marker+N|marker-N ; additionally split real hostname at specified marker. must be within host..endhost or won't be splitted. + --dpi-desync-hostfakesplit-mod=mod[,mod] ; can be none, host=, altorder=0|1 + --dpi-desync-ipfrag-pos-tcp=<8..9216> ; ip frag position starting from the transport header. multiple of 8, default 8. + --dpi-desync-ipfrag-pos-udp=<8..9216> ; ip frag position starting from the transport header. multiple of 8, default 32. + --dpi-desync-ts-increment= ; ts fooling TSval signed increment. default -600000 + --dpi-desync-badseq-increment= ; badseq fooling seq signed increment. default -10000 + --dpi-desync-badack-increment= ; badseq fooling ackseq signed increment. default -66000 + --dpi-desync-any-protocol=0|1 ; 0(default)=desync only http and tls 1=desync any nonempty data packet + --dpi-desync-fake-tcp-mod=mod[,mod] ; comma separated list of tcp fake mods. available mods : none,seq + --dpi-desync-fake-http=[+ofs]@|0xHEX ; file containing fake http request + --dpi-desync-fake-tls=[+ofs]@|0xHEX|![+offset] ; file containing fake TLS ClientHello (for https). '!' = standard fake + --dpi-desync-fake-tls-mod=mod[,mod] ; comma separated list of TLS fake mods. available mods : none,rnd,rndsni,sni=,dupsid,padencap + --dpi-desync-fake-unknown=[+ofs]@|0xHEX ; file containing unknown protocol fake payload + --dpi-desync-fake-syndata=[+ofs]@|0xHEX ; file containing SYN data payload + --dpi-desync-fake-quic=[+ofs]@|0xHEX ; file containing fake QUIC Initial + --dpi-desync-fake-wireguard=[+ofs]@|0xHEX ; file containing fake wireguard handshake initiation + --dpi-desync-fake-dht=[+ofs]@|0xHEX ; file containing fake DHT (d1..e) + --dpi-desync-fake-discord=[+ofs]@|0xHEX ; file containing fake Discord voice connection initiation packet (IP Discovery) + --dpi-desync-fake-stun=[+ofs]@|0xHEX ; file containing fake STUN message + --dpi-desync-fake-unknown-udp=[+ofs]@|0xHEX ; file containing unknown udp protocol fake payload + --dpi-desync-udplen-increment= ; increase or decrease udp packet length by N bytes (default 2). negative values decrease length. + --dpi-desync-udplen-pattern=[+ofs]@|0xHEX ; udp tail fill pattern + --dpi-desync-start=[n|d|s]N ; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) greater or equal than N + --dpi-desync-cutoff=[n|d|s]N ; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N + --hostlist= ; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply if not prefixed with `^`, gzip supported, multiple hostlists allowed) + --hostlist-domains= ; comma separated fixed domain list + --hostlist-exclude= ; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply if not prefixed with `^`, gzip supported, multiple hostlists allowed) + --hostlist-exclude-domains= ; comma separated fixed domain list + --hostlist-auto= ; detect DPI blocks and build hostlist automatically + --hostlist-auto-fail-threshold= ; how many failed attempts cause hostname to be added to auto hostlist (default : 3) + --hostlist-auto-fail-time= ; all failed attemps must be within these seconds (default : 60) + --hostlist-auto-retrans-threshold= ; how many request retransmissions cause attempt to fail (default : 3) + --hostlist-auto-debug= ; debug auto hostlist positives + --new ; begin new strategy (new profile) + --skip ; do not use this profile + --filter-l3=ipv4|ipv6 ; L3 protocol filter. multiple comma separated values allowed. + --filter-tcp=[~]port1[-port2]|* ; TCP port filter. ~ means negation. setting tcp and not setting udp filter denies udp. comma separated list supported. + --filter-udp=[~]port1[-port2]|* ; UDP port filter. ~ means negation. setting udp and not setting tcp filter denies tcp. comma separated list supported. + --filter-l7= ; L6-L7 protocol filter. multiple comma separated values allowed. proto: http tls quic wireguard dht discord stun unknown + --filter-ssid=ssid1[,ssid2,ssid3,...] ; per profile wifi SSID filter + --ipset= ; ipset include filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) + --ipset-ip= ; comma separated fixed subnet list + --ipset-exclude= ; ipset exclude filter (one ip/CIDR per line, ipv4 and ipv6 accepted, gzip supported, multiple ipsets allowed) + --ipset-exclude-ip= ; comma separated fixed subnet list +``` + +Many parameters dealing with binary data support loading from hex string prefixed by "0x" or from a file. +Filename can be "as is" or prefixed with "@". If there's "+number" prefix before "@" it means offset of data inside the file. +Offset must be less that data size. ### DPI desync attack diff --git a/docs/readme.md b/docs/readme.md index 3fcd61ad..ac8f55e1 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -163,112 +163,112 @@ DPI. Все больше становится внереестровых бло dvtws, собираемый из тех же исходников (см. [документация BSD](./bsd.md)). ``` -@|$ ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. - ---debug=0|1 ; 1=выводить отладочные сообщения ---dry-run ; проверить опции командной строки и выйти. код 0 - успешная проверка. ---version ; вывести версию и выйти ---comment ; любой текст (игнорируется) ---daemon ; демонизировать прогу ---pidfile= ; сохранить PID в файл ---user= ; менять uid процесса ---uid=uid[:gid] ; менять uid процесса ---qnum=N ; номер очереди N ---bind-fix4 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv4 пакетов ---bind-fix6 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv6 пакетов ---ctrack-timeouts=S:E:F[:U] ; таймауты внутреннего conntrack в состояниях SYN, ESTABLISHED, FIN, таймаут udp. по умолчанию 60:300:60:60 ---ctrack-disable=[0|1] ; 1 или остутствие аргумента отключает conntrack ---ipcache-lifetime= ; время жизни записей кэша IP в секундах. 0 - без ограничений. ---ipcache-hostname=[0|1] ; 1 или отсутствие аргумента включают кэширование имен хостов для применения в стратегиях нулевой фазы ---wsize=[:] ; менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, то он не меняется (устарело !) ---wssize=[:] ; менять tcp window size на указанный размер в исходящих пакетах. scale_factor по умолчанию 0. (см. conntrack !) ---wssize-cutoff=[n|d|s]N ; изменять server window size в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N ---synack-split=[syn|synack|acksyn] ; выполнить tcp split handshake. вместо SYN,ACK отсылать только SYN, SYN+ACK или ACK+SYN ---orig-ttl= ; модифицировать TTL оригинального пакета ---orig-ttl6= ; модифицировать ipv6 hop limit оригинальных пакетов. если не указано, используется значение --orig-ttl ---orig-autottl=[[:[-]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +5:3-64. "0:0-0" или "-" отключает функцию ---orig-autottl6=[[:[-]]|-] ; переопределение предыдущего параметра для ipv6 ---orig-mod-start=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N ---orig-mod-cutoff=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N ---dup= ; высылать N дубликатов до оригинала ---dup-replace=[0|1] ; 1 или отсутствие аргумента блокирует отправку оригинала. отправляются только дубликаты. ---dup-ttl= ; модифицировать TTL дубликатов ---dup-ttl6= ; модифицировать ipv6 hop limit дубликатов. если не указано, используется значение --dup-ttl ---dup-autottl=[[:[-]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +1:3-64. "0:0-0" или "-" отключает функцию ---dup-autottl6=[[:[-]]|-] ; переопределение предыдущего параметра для ipv6 ---dup-fooling= ; дополнительные методики как сделать, чтобы дубликат не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2 ---dup-ts-increment= ; инкремент TSval для ts. по умолчанию -600000 ---dup-badseq-increment= ; инкремент sequence number для badseq. по умолчанию -10000 ---dup-badack-increment= ; инкремент ack sequence number для badseq. по умолчанию -66000 ---dup-start=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N ---dup-cutoff=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N ---hostcase ; менять регистр заголовка "Host:" по умолчанию на "host:". ---hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета ---methodeol ; добавить перевод строки в unix стиле ('\n') перед методом и убрать пробел из Host: : "GET / ... Host: domain.com" => "\nGET / ... Host:domain.com" ---hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase ---domcase ; домен после Host: сделать таким : TeSt.cOm ---dpi-desync=[,][, ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000 ---dpi-desync-ttl= ; установить ttl для десинхронизирующих пакетов ---dpi-desync-ttl6= ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение --dpi-desync-ttl ---dpi-desync-autottl=[[:[-]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: 1:3-20. "0:0-0" или "-" отключает функцию ---dpi-desync-autottl6=[[:[-]]|-] ; переопределение предыдущего параметра для ipv6 ---dpi-desync-fooling= ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2 ---dpi-desync-repeats= ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты) ---dpi-desync-skip-nosni=0|1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI ---dpi-desync-split-pos=N|-N|marker+N|marker-N ; список через запятую маркеров для tcp сегментации в режимах split и disorder ---dpi-desync-split-seqovl=N|-N|marker+N|marker-N ; единичный маркер, определяющий величину перекрытия sequence в режимах split и disorder. для split поддерживается только положительное число. ---dpi-desync-split-seqovl-pattern=|0xHEX ; чем заполнять фейковую часть overlap ---dpi-desync-fakedsplit-pattern=|0xHEX ; чем заполнять фейки в fakedsplit/fakeddisorder ---dpi-desync-fakedsplit-mod=mod[,mod] ; может быть none, altorder=0|1|2|3 ---dpi-desync-hostfakesplit-midhost=marker+N|marker-N ; маркер дополнительного разреза сегмента с оригинальным хостом. должен попадать в пределы хоста. ---dpi-desync-hostfakesplit-mod=mod[,mod] ; может быть none, host=, altorder=0|1 ---dpi-desync-ts-increment= ; инкремент TSval для ts. по умолчанию -600000 ---dpi-desync-badseq-increment= ; инкремент sequence number для badseq. по умолчанию -10000 ---dpi-desync-badack-increment= ; инкремент ack sequence number для badseq. по умолчанию -66000 ---dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello 1=по всем непустым пакетам данных ---dpi-desync-fake-tcp-mod=mod[,mod] ; список через запятую режимов runtime модификации tcp фейков (любых) : none, seq ---dpi-desync-fake-http=|0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному www.iana.org ---dpi-desync-fake-tls=|0xHEX|![+offset] ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному. '!' = стандартный фейк ---dpi-desync-fake-tls-mod=mod[,mod] ; список через запятую режимов runtime модификации фейков : none,rnd,rndsni,sni=,dupsid,padencap ---dpi-desync-fake-unknown=|0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт ---dpi-desync-fake-syndata=|0xHEX ; файл, содержащий фейковый пейлоад пакета SYN для режима десинхронизации syndata ---dpi-desync-fake-quic=|0xHEX ; файл, содержащий фейковый QUIC Initial ---dpi-desync-fake-wireguard=|0xHEX ; файл, содержащий фейковый wireguard handshake initiation ---dpi-desync-fake-dht=|0xHEX ; файл, содержащий фейковый пейлоад DHT протокола для dpi-desync=fake, на замену стандартным нулям 64 байт ---dpi-desync-fake-discord=|0xHEX ; файл, содержащий фейковый пейлоад Discord протокола нахождения IP адреса для голосовых чатов для dpi-desync=fake, на замену стандартным нулям 64 байт ---dpi-desync-fake-stun=|0xHEX ; файл, содержащий фейковый пейлоад STUN протокола для dpi-desync=fake, на замену стандартным нулям 64 байт ---dpi-desync-fake-unknown-udp=|0xHEX ; файл, содержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fake, на замену стандартным нулям 64 байт ---dpi-desync-udplen-increment= ; насколько увеличивать длину udp пейлоада в режиме udplen ---dpi-desync-udplen-pattern=|0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули ---dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N ---dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N ---hostlist= ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются, если хост не начинается с '^'. - ; в файле должен быть хост на каждой строке. - ; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. - ; при изменении времени модификации файла он перечитывается автоматически по необходимости - ; список может быть запакован в gzip. формат автоматически распознается и разжимается - ; списков может быть множество. пустой общий лист = его отсутствие - ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. ---hostlist-domains= ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов. ---hostlist-exclude= ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам. ---hostlist-exclude-domains= ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов. ---hostlist-auto= ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) ---hostlist-auto-fail-threshold= ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) ---hostlist-auto-fail-time= ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) ---hostlist-auto-retrans-threshold= ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3) ---hostlist-auto-debug= ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. ---new ; начало новой стратегии (новый профиль) ---skip ; не использовать этот профиль . полезно для временной деактивации профиля без удаления параметров. ---filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии ---filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую. ---filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает tcp. поддерживается список через запятую. ---filter-l7= ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. proto : http tls quic wireguard dht discord stun unknown ---filter-ssid=ssid1[,ssid2,ssid3,...] ; фильтр по имени wifi сети (только для linux) ---ipset= ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. ---ipset-ip= ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей. ---ipset-exclude= ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. ---ipset-exclude-ip= ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей. +@|$ ; читать конфигурацию из файла. опция должна быть первой. остальные опции игнорируются. + +--debug=0|1 ; 1=выводить отладочные сообщения +--dry-run ; проверить опции командной строки и выйти. код 0 - успешная проверка. +--version ; вывести версию и выйти +--comment ; любой текст (игнорируется) +--daemon ; демонизировать прогу +--pidfile= ; сохранить PID в файл +--user= ; менять uid процесса +--uid=uid[:gid] ; менять uid процесса +--qnum=N ; номер очереди N +--bind-fix4 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv4 пакетов +--bind-fix6 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv6 пакетов +--ctrack-timeouts=S:E:F[:U] ; таймауты внутреннего conntrack в состояниях SYN, ESTABLISHED, FIN, таймаут udp. по умолчанию 60:300:60:60 +--ctrack-disable=[0|1] ; 1 или остутствие аргумента отключает conntrack +--ipcache-lifetime= ; время жизни записей кэша IP в секундах. 0 - без ограничений. +--ipcache-hostname=[0|1] ; 1 или отсутствие аргумента включают кэширование имен хостов для применения в стратегиях нулевой фазы +--wsize=[:] ; менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, то он не меняется (устарело !) +--wssize=[:] ; менять tcp window size на указанный размер в исходящих пакетах. scale_factor по умолчанию 0. (см. conntrack !) +--wssize-cutoff=[n|d|s]N ; изменять server window size в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N +--synack-split=[syn|synack|acksyn] ; выполнить tcp split handshake. вместо SYN,ACK отсылать только SYN, SYN+ACK или ACK+SYN +--orig-ttl= ; модифицировать TTL оригинального пакета +--orig-ttl6= ; модифицировать ipv6 hop limit оригинальных пакетов. если не указано, используется значение --orig-ttl +--orig-autottl=[[:[-]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +5:3-64. "0:0-0" или "-" отключает функцию +--orig-autottl6=[[:[-]]|-] ; переопределение предыдущего параметра для ipv6 +--orig-mod-start=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N +--orig-mod-cutoff=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N +--dup= ; высылать N дубликатов до оригинала +--dup-replace=[0|1] ; 1 или отсутствие аргумента блокирует отправку оригинала. отправляются только дубликаты. +--dup-ttl= ; модифицировать TTL дубликатов +--dup-ttl6= ; модифицировать ipv6 hop limit дубликатов. если не указано, используется значение --dup-ttl +--dup-autottl=[[:[-]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +1:3-64. "0:0-0" или "-" отключает функцию +--dup-autottl6=[[:[-]]|-] ; переопределение предыдущего параметра для ipv6 +--dup-fooling= ; дополнительные методики как сделать, чтобы дубликат не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2 +--dup-ts-increment= ; инкремент TSval для ts. по умолчанию -600000 +--dup-badseq-increment= ; инкремент sequence number для badseq. по умолчанию -10000 +--dup-badack-increment= ; инкремент ack sequence number для badseq. по умолчанию -66000 +--dup-start=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N +--dup-cutoff=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N +--hostcase ; менять регистр заголовка "Host:" по умолчанию на "host:". +--hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета +--methodeol ; добавить перевод строки в unix стиле ('\n') перед методом и убрать пробел из Host: : "GET / ... Host: domain.com" => "\nGET / ... Host:domain.com" +--hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase +--domcase ; домен после Host: сделать таким : TeSt.cOm +--dpi-desync=[,][, ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000 +--dpi-desync-ttl= ; установить ttl для десинхронизирующих пакетов +--dpi-desync-ttl6= ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение --dpi-desync-ttl +--dpi-desync-autottl=[[:[-]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: 1:3-20. "0:0-0" или "-" отключает функцию +--dpi-desync-autottl6=[[:[-]]|-] ; переопределение предыдущего параметра для ipv6 +--dpi-desync-fooling= ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2 +--dpi-desync-repeats= ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты) +--dpi-desync-skip-nosni=0|1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI +--dpi-desync-split-pos=N|-N|marker+N|marker-N ; список через запятую маркеров для tcp сегментации в режимах split и disorder +--dpi-desync-split-seqovl=N|-N|marker+N|marker-N ; единичный маркер, определяющий величину перекрытия sequence в режимах split и disorder. для split поддерживается только положительное число. +--dpi-desync-split-seqovl-pattern=[+ofs]@|0xHEX ; чем заполнять фейковую часть overlap +--dpi-desync-fakedsplit-pattern=[+ofs]@|0xHEX ; чем заполнять фейки в fakedsplit/fakeddisorder +--dpi-desync-fakedsplit-mod=mod[,mod] ; может быть none, altorder=0|1|2|3 +--dpi-desync-hostfakesplit-midhost=marker+N|marker-N ; маркер дополнительного разреза сегмента с оригинальным хостом. должен попадать в пределы хоста. +--dpi-desync-hostfakesplit-mod=mod[,mod] ; может быть none, host=, altorder=0|1 +--dpi-desync-ts-increment= ; инкремент TSval для ts. по умолчанию -600000 +--dpi-desync-badseq-increment= ; инкремент sequence number для badseq. по умолчанию -10000 +--dpi-desync-badack-increment= ; инкремент ack sequence number для badseq. по умолчанию -66000 +--dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello 1=по всем непустым пакетам данных +--dpi-desync-fake-tcp-mod=mod[,mod] ; список через запятую режимов runtime модификации tcp фейков (любых) : none, seq +--dpi-desync-fake-http=[+ofs]@|0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному www.iana.org +--dpi-desync-fake-tls=[+ofs]@|0xHEX|![+offset] ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному. '!' = стандартный фейк +--dpi-desync-fake-tls-mod=mod[,mod] ; список через запятую режимов runtime модификации фейков : none,rnd,rndsni,sni=,dupsid,padencap +--dpi-desync-fake-unknown=[+ofs]@|0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт +--dpi-desync-fake-syndata=[+ofs]@|0xHEX ; файл, содержащий фейковый пейлоад пакета SYN для режима десинхронизации syndata +--dpi-desync-fake-quic=[+ofs]@|0xHEX ; файл, содержащий фейковый QUIC Initial +--dpi-desync-fake-wireguard=[+ofs]@|0xHEX ; файл, содержащий фейковый wireguard handshake initiation +--dpi-desync-fake-dht=[+ofs]@|0xHEX ; файл, содержащий фейковый пейлоад DHT протокола для dpi-desync=fake, на замену стандартным нулям 64 байт +--dpi-desync-fake-discord=[+ofs]@|0xHEX ; файл, содержащий фейковый пейлоад Discord протокола нахождения IP адреса для голосовых чатов для dpi-desync=fake, на замену стандартным нулям 64 байт +--dpi-desync-fake-stun=[+ofs]@|0xHEX ; файл, содержащий фейковый пейлоад STUN протокола для dpi-desync=fake, на замену стандартным нулям 64 байт +--dpi-desync-fake-unknown-udp=[+ofs]@|0xHEX ; файл, содержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fake, на замену стандартным нулям 64 байт +--dpi-desync-udplen-increment= ; на сколько увеличивать длину udp пейлоада в режиме udplen +--dpi-desync-udplen-pattern=[+ofs]@|0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули +--dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N +--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N +--hostlist= ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются, если хост не начинается с '^'. + ; в файле должен быть хост на каждой строке. + ; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. + ; при изменении времени модификации файла он перечитывается автоматически по необходимости + ; список может быть запакован в gzip. формат автоматически распознается и разжимается + ; списков может быть множество. пустой общий лист = его отсутствие + ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. +--hostlist-domains= ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов. +--hostlist-exclude= ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам. +--hostlist-exclude-domains= ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов. +--hostlist-auto= ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) +--hostlist-auto-fail-threshold= ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) +--hostlist-auto-fail-time= ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) +--hostlist-auto-retrans-threshold= ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3) +--hostlist-auto-debug= ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. +--new ; начало новой стратегии (новый профиль) +--skip ; не использовать этот профиль . полезно для временной деактивации профиля без удаления параметров. +--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии +--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую. +--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает tcp. поддерживается список через запятую. +--filter-l7= ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. proto : http tls quic wireguard dht discord stun unknown +--filter-ssid=ssid1[,ssid2,ssid3,...] ; фильтр по имени wifi сети (только для linux) +--ipset= ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. +--ipset-ip= ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей. +--ipset-exclude= ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая. +--ipset-exclude-ip= ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей. ``` `--debug` позволяет выводить подробный лог действий на консоль, в syslog или в файл. Может быть важен порядок следования @@ -280,6 +280,13 @@ dvtws, собираемый из тех же исходников (см. [док невозможна. Если вы потом удалите файл, и у процесса не будет прав на создание файла в его директории, лог больше не будет вестись. Вместо удаления лучше использовать truncate. В шелле это можно сделать через команду ": >filename" +Многие параметры, загружающие двоичные данные из файлов, поддерживают загрузку из hex-строки или из файла. +hex строка начинается с "0x". Имя файла можно писать как есть или использовать префикс "@". +Если перед префиксом "@" указано "+<число>", то это означает смещение полезных данных внутри файла. +Файл может загружаться целиком с нулевой позиции, к нему могут применяться модификации, требующие полного файла (TLS), +но передача пойдет с позиции offset. offset должен быть меньше длины файла. Если к блоку данных применяется мод, +который уменьшает размер данных, и offset окажется не меньше новой длины данных, будет ошибка. + ### АТАКА ДЕСИНХРОНИЗАЦИИ DPI Суть ее в следующем. Берется оригинальный запрос, модифицируется, добавляется поддельная информация (фейки)