--dpi-desync-udplen-pattern=<filename>|0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули
--dpi-desync-udplen-pattern=<filename>|0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули
--dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
--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
--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
--hostlist=<filename> ; применять дурение только к хостам из листа. может быть множество листов, они объединяются. пустой обший лист = его отсутствие
--hostlist=<filename> ; применять дурение только к хостам из листа. может быть множество листов, они обьединяются. пустой обший лист = его отсутствие
--hostlist-exclude=<filename> ; не применять дурение к хостам из листа. может быть множество листов, они объединяются
--hostlist-exclude=<filename> ; не применять дурение к хостам из листа. может быть множество листов, они обьединяются
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
--new ; начало новой стратегии
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
--filter-tcp=[~]port1[-port2] ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp.
--filter-udp=[~]port1[-port2] ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp.
Параметры манипуляции могут сочетаться в любых комбинациях.
Параметры манипуляции могут сочетаться в любых комбинациях.
@ -358,13 +363,14 @@ fakeknown отличается от fake тем, что применяется
сервера. Берутся базовые значения TTL 64,128,255, смотрится входящий пакет
сервера. Берутся базовые значения TTL 64,128,255, смотрится входящий пакет
(да, требуется направить первый входящий пакет на nfqws !).
(да, требуется направить первый входящий пакет на nfqws !).
Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию),
Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию),
то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученный TTL больше длины пути,
то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученый TTL больше длины пути,
то автоматизм не сработал и берутся фиксированные значения TTL для атаки.
то автоматизм не сработал и берутся фиксированные значения TTL для атаки.
Техника позволяет решить вопрос, когда вся сеть перегорожена шлагбаумами (DPI, ТСПУ) везде где только можно,
Техника позволяет решить вопрос, когда вся сеть перегорожена шлагбаумами (DPI, ТСПУ) везде где только можно,
включая магистралов. Но потенциально может давать сбои.
включая магистралов. Но потенциально может давать сбои.
Например, при асимметрии входящего и исходящего канала до конкретного сервера.
Например, при ассиметрии входящего и исходящего канала до конкретного сервера.
На каких-то провайдерах эта техника будет работать неплохо, на других доставит больше проблем, чем пользы.
На каких-то провайдерах эта техника будет работать неплохо, на других доставит больше проблем, чем пользы.
Где-то может потребоваться тюнинг параметров. Лучше использовать с дополнительным ограничителем.
Где-то может потребоваться тюнинг параметров. Лучше использовать с дополнительным ограничителем.
Не рекомендуется для BSD систем, поскольку там нельзя ограничить количество входящих пакетов через connbytes.
Режимы дурения могут сочетаться в любых комбинациях. --dpi-desync-fooling берет множество значений через запятую.
Режимы дурения могут сочетаться в любых комбинациях. --dpi-desync-fooling берет множество значений через запятую.
@ -590,7 +596,7 @@ chrome рандомизирует фингерпринт TLS. SNI может о
udplen увеличивает размер udp пакета на указанное в --dpi-desync-udplen-increment количество байтов.
udplen увеличивает размер udp пакета на указанное в --dpi-desync-udplen-increment количество байтов.
Паддинг заполняется нулями по умолчанию, но можно задать свой паттерн.
Паддинг заполняется нулями по умолчанию, но можно задать свой паттерн.
Предназначено для обмана DPI, ориентирующегося на размеры пакетов.
Предназначено для обмана DPI, ориентирующегося на размеры пакетов.
Может сработать, если пользовательский протокол не привязан жестко к размеру udp пейлоада.
Может сработать, если пользовательсткий протокол не привязан жестко к размеру udp пейлоада.
Режим tamper означает модификацию пакетов известных протоколов особенным для протокола образом.
Режим tamper означает модификацию пакетов известных протоколов особенным для протокола образом.
На текущий момент работает только с DHT.
На текущий момент работает только с DHT.
Поддерживается определение пакетов QUIC Initial с расшифровкой содержимого и имени хоста, то есть параметр
Поддерживается определение пакетов QUIC Initial с расшифровкой содержимого и имени хоста, то есть параметр
Видимо единственный рабочий метод - отказаться от iptables и использовать nftables.
Видимо единственный рабочий метод - отказаться от iptables и использовать nftables.
Хук должен быть с приоритетом 101 или выше.
Хук должен быть с приоритетом 101 или выше.
МНОЖЕСТВЕННЫЕ СТРАТЕГИИ
nfqws способен по-разному реагировать на различные запросы и применять разные стратегии дурения.
Это реализовано посредством поддержки множества профилей дурения.
Профили разделяются в командной строке параметром --new. Первый профиль создается автоматически.
Для него не нужно --new. Каждый профиль имеет фильтр. По умолчанию он пуст, то есть профиль удовлетворяет
любым условиям.
Фильтр может содержать жесткие параметры : версия ip протокола или порты tcp/udp.
Они всегда однозначно идентифицируются даже на нулевой фазе десинхронизации, когда еще хост неизвестен.
В качестве фильтра могут выступать и хост-листы. Они могут сочетаться с жесткими параметрами.
При поступлении запроса идет проверка профилей в порядке от первого до последнего до
достижения первого совпадения с фильтром.
Жесткие параметры фильтра сверяются первыми. При несовпадении идет сразу же переход к следующему профилю.
Если какой-то профиль удовлетворяет жесткому фильтру и содержит авто-хостлист, он выбирается сразу.
Если профиль удовлетворяет жесткому фильтру, для него задан хостлист, и у нас еще нет имени хоста,
идет переход к следующему профилю. В противном случае идет проверка по хостлистам этого профиля.
Если имя хоста удовлетворяет листам, выбирается этот профиль. Иначе идет переход к следующему.
Может так случиться, что до получения имени хоста соединение идет по одному профилю, а при получении
хоста профиль меняется на лету. Поэтому если у вас есть параметры дурения нулевой фазы, тщательно
продумывайте что может произойти при переключении стратегии. Смотрите debug log, чтобы лучше
понять что делает nfqws.
ВАЖНО : множественные стратегии создавались только для случаев, когда невозможно обьединить
имеющиеся стратегии для разных ресурсов. Копирование стратегий из blockcheck для разных сайтов
во множество профилей без понимания как они работают приведет к нагромождению параметров, которые все равно
не покроют все возможные заблокированные ресурсы. Вы только увязните в этой каше.
tpws
tpws
-----
-----
@ -669,7 +701,7 @@ tpws - это transparent proxy.
--bind-linklocal=no|unwanted|prefer|force
--bind-linklocal=no|unwanted|prefer|force
; no : биндаться только на global ipv6
; no : биндаться только на global ipv6
; unwanted (default) : предпочтительно global, если нет - LL
; unwanted (default) : предпочтительно global, если нет - LL
; prefer : предпочтительно LL, если нет - global
; prefer : предпочительно LL, если нет - global
; force : биндаться только на LL
; force : биндаться только на LL
--bind-iface4=<iface> ; слушать на первом ipv4 интерфейса iface
--bind-iface4=<iface> ; слушать на первом ipv4 интерфейса iface
--bind-iface6=<iface> ; слушать на первом ipv6 интерфейса iface
--bind-iface6=<iface> ; слушать на первом ipv6 интерфейса iface
@ -692,7 +724,7 @@ tpws - это transparent proxy.
--maxfiles=<max_open_files> ; макс количество файловых дескрипторов (setrlimit). мин требование (X*connections+16), где X=6 в tcp proxy mode, X=4 в режиме тамперинга.
--maxfiles=<max_open_files> ; макс количество файловых дескрипторов (setrlimit). мин требование (X*connections+16), где X=6 в tcp proxy mode, X=4 в режиме тамперинга.
; стоит сделать запас с коэффициентом как минимум 1.5. по умолчанию maxfiles (X*connections)*1.5+16
; стоит сделать запас с коэффициентом как минимум 1.5. по умолчанию maxfiles (X*connections)*1.5+16
--max-orphan-time=<sec>; если вы запускаете через tpws торрент-клиент с множеством раздач, он пытается установить очень много исходящих соединений,
--max-orphan-time=<sec>; если вы запускаете через tpws торрент-клиент с множеством раздач, он пытается установить очень много исходящих соединений,
; большая часть из которых отваливается по таймауту (юзера сидят за NAT, firewall, ...)
; большая часть из которых отваливается по таймату (юзера сидят за NAT, firewall, ...)
; установление соединения в linux может длиться очень долго. локальный конец отвалился, перед этим послав блок данных,
; установление соединения в linux может длиться очень долго. локальный конец отвалился, перед этим послав блок данных,
; tpws ждет подключения удаленного конца, чтобы отослать ему этот блок, и зависает надолго.
; tpws ждет подключения удаленного конца, чтобы отослать ему этот блок, и зависает надолго.
; настройка позволяет сбрасывать такие подключения через N секунд, теряя блок данных. по умолчанию 5 сек. 0 означает отключить функцию
; настройка позволяет сбрасывать такие подключения через N секунд, теряя блок данных. по умолчанию 5 сек. 0 означает отключить функцию
@ -734,9 +766,9 @@ tpws - это transparent proxy.
; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.
; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.
; по сигналу HUP список будет перечитан при следующем принятом соединении
; по сигналу HUP список будет перечитан при следующем принятом соединении
; список может быть запакован в gzip. формат автоматически распознается и разжимается
; список может быть запакован в gzip. формат автоматически распознается и разжимается
; списков может быть множество, они объединяются. пустой общий лист = его отсутствие
; списков может быть множество, они обьединяются. пустой общий лист = его отсутствие
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов, они объединяются
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов, они обьединяются
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
@ -853,7 +885,7 @@ tpws поддерживает эту возможность асинхронно
структуры данных. В случае отсутствия SNI разбиение отменяется.
структуры данных. В случае отсутствия SNI разбиение отменяется.
--tlsrec-pos режет на указанной позиции. Если длина блока данных TLS меньше указанной позиции, режем на позиции 1.
--tlsrec-pos режет на указанной позиции. Если длина блока данных TLS меньше указанной позиции, режем на позиции 1.
Параметр сочетается с --split-pos. В этом случае происходит сначала разделение на уровне TLS record layer, потом на уровне TCP.
Параметр сочетается с --split-pos. В этом случае происходит сначала разделение на уровне TLS record layer, потом на уровне TCP.
Самая изощрённая атака --tlsrec, --split-pos и --disorder вместе.
Самая изорщенная атака --tlsrec, --split-pos и --disorder вместе.
--tlsrec ломает значительное количество сайтов. Криптобиблиотеки (openssl, ...) на оконечных http серверах
--tlsrec ломает значительное количество сайтов. Криптобиблиотеки (openssl, ...) на оконечных http серверах
без проблем принимают разделенные tls сегменты, но мидлбоксы - не всегда. К мидлбоксам можно отнести CDN
без проблем принимают разделенные tls сегменты, но мидлбоксы - не всегда. К мидлбоксам можно отнести CDN
или системы ddos-защиты. Поэтому применение --tlsrec без ограничителей вряд ли целесообразно.
или системы ddos-защиты. Поэтому применение --tlsrec без ограничителей вряд ли целесообразно.
@ -962,7 +994,7 @@ ipset, это длительная операция на больших лист
Список РКН уже достиг внушительных размеров в сотни тысяч IP адресов. Поэтому для оптимизации ipset
Список РКН уже достиг внушительных размеров в сотни тысяч IP адресов. Поэтому для оптимизации ipset
применяется утилита ip2net. Она берет список отдельных IP адресов и пытается интеллектуально создать из него подсети для сокращения
применяется утилита ip2net. Она берет список отдельных IP адресов и пытается интеллектуально создать из него подсети для сокращения
количества адресов. ip2net отсекает неправильные записи в листах, гарантируя отсутствие ошибок при их загрузке.
количества адресов. ip2net отсекает неправильные записи в листах, гарантируя осутствие ошибок при их загрузке.
ip2net написан на языке C, поскольку операция ресурсоемкая. Иные способы роутер может не потянуть.
ip2net написан на языке C, поскольку операция ресурсоемкая. Иные способы роутер может не потянуть.
Можно внести список доменов в ipset/zapret-hosts-user-ipban.txt. Их ip адреса будут помещены
Можно внести список доменов в ipset/zapret-hosts-user-ipban.txt. Их ip адреса будут помещены
Если NFQWS_OPT_DESYNC_QUIC6 не задано, то берется NFQWS_OPT_DESYNC_QUIC.
Если NFQWS_OPT_DESYNC_QUIC6 не задано, то берется NFQWS_OPT_DESYNC_QUIC.
Настройка системы управления выборочным traffic offload (только если поддерживается)
Настройка системы управления выборочным traffic offload (только если поддерживается)
donttouch : выборочное управление отключено, используется системная настройка, простой инсталлятор выключает системную настройку, если она не совместима с выбранным режимом
donttouch : выборочное управление отключено, используется системная настройка, простой инсталятор выключает системную настройку, если она не совместима с выбранным режимом
none : выборочное управление отключено, простой инсталлятор выключает системную настройку
none : выборочное управление отключено, простой инсталятор выключает системную настройку
software : выборочное управление включено в режиме software, простой инсталлятор выключает системную настройку
software : выборочное управление включено в режиме software, простой инсталятор выключает системную настройку
hardware : выборочное управление включено в режиме hardware, простой инсталлятор выключает системную настройку
hardware : выборочное управление включено в режиме hardware, простой инсталятор выключает системную настройку
FLOWOFFLOAD=donttouch
FLOWOFFLOAD=donttouch
Параметр GETLIST указывает инсталлятору install_easy.sh какой скрипт дергать
Параметр GETLIST указывает инсталятору install_easy.sh какой скрипт дергать
для обновления списка заблокированных ip или хостов.
для обновления списка заблокированных ip или хостов.
Он же вызывается через get_config.sh из запланированных заданий (crontab или systemd timer).
Он же вызывается через get_config.sh из запланированных заданий (crontab или systemd timer).
Поместите сюда название скрипта, который будете использовать для обновления листов.
Поместите сюда название скрипта, который будете использовать для обновления листов.
@ -1542,16 +1574,16 @@ tpws к http и nfqws к https. При этом поддерживаются у
install_easy.sh автоматизирует ручные варианты процедур установки (см manual_setup.txt).
install_easy.sh автоматизирует ручные варианты процедур установки (см manual_setup.txt).
Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS.
Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS.
Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров".
Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".
Если система запуска поддерживается, но используется не поддерживаемый инсталлятором менеджер пакетов
Если система запуска поддерживается, но используется не поддерживаемый инсталятором менеджер пакетов
или названия пакетов не соответствуют прописанным в инсталлятор, пакеты нужно установить вручную.
или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную.
Всегда требуется curl. ipset - только для режима iptables, для nftables - не нужен.
Всегда требуется curl. ipset - только для режима iptables, для nftables - не нужен.
Для совсем обрезанных дистрибутивов (alpine) требуется отдельно установить iptables и ip6tables, либо nftables.
Для совсем обрезанных дистрибутивов (alpine) требуется отдельно установить iptables и ip6tables, либо nftables.
В комплекте идут статические бинарники для большинства архитектур. Какой-то из них подойдет
В комплекте идут статические бинарики для большинства архитектур. Какой-то из них подойдет
с вероятностью 99%. Но если у вас экзотическая система, инсталлятор попробует собрать бинарники сам
с вероятностью 99%. Но если у вас экзотическая система, инсталятор попробует собрать бинарики сам
через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим
через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим
компиляции следующим вызовом :
компиляции следующим вызовом :
@ -1559,8 +1591,8 @@ install_easy.sh автоматизирует ручные варианты пр
Под openwrt все уже сразу готово для использования системы в качестве роутера.
Под openwrt все уже сразу готово для использования системы в качестве роутера.
Имена интерфейсов WAN и LAN известны из настроек системы.
Имена интерфейсов WAN и LAN известны из настроек системы.
Под другими системами роутер вы настраиваете самостоятельно. инсталлятор в это не вмешивается.
Под другими системами роутер вы настраиваете самостоятельно. Инсталятор в это не вмешивается.
инсталлятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы.
Инсталятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы.
Нужно понимать, что заворот проходящего трафика на tpws в прозрачном режиме происходит до выполнения маршрутизации,
Нужно понимать, что заворот проходящего трафика на tpws в прозрачном режиме происходит до выполнения маршрутизации,
следовательно возможна фильтрация по LAN и невозможна по WAN.
следовательно возможна фильтрация по LAN и невозможна по WAN.
Решение о завороте на tpws локального исходящего трафика принимается после выполнения маршрутизации,
Решение о завороте на tpws локального исходящего трафика принимается после выполнения маршрутизации,
@ -1568,7 +1600,7 @@ install_easy.sh автоматизирует ручные варианты пр
Заворот на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN.
Заворот на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN.
Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера.
Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера.
Деинсталляция выполняется через uninstall_easy.sh
Деинсталяция выполняется через uninstall_easy.sh
Простая установка на openwrt
Простая установка на openwrt
@ -1585,7 +1617,7 @@ install_easy.sh автоматизирует ручные варианты пр
После успешной установки можно удалить zapret из tmp для освобождения RAM :
После успешной установки можно удалить zapret из tmp для освобождения RAM :
rm -r /tmp/zapret
rm -r /tmp/zapret
Для более гибкой настройки перед запуском инсталлятора следует выполнить раздел "Выбор параметров".
Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".
Система простой инсталяции заточена на любое умышленное или неумышленное изменение прав доступа на файлы.
Система простой инсталяции заточена на любое умышленное или неумышленное изменение прав доступа на файлы.
Устойчива к репаку под windows. После копирования в /opt права будут принудительно восстановлены.
Устойчива к репаку под windows. После копирования в /opt права будут принудительно восстановлены.
constchar*f_tcpin=*pf_tcp_src?*params.hostlist_auto_filename?"("DIVERT_TCP_INBOUNDS" or ("DIVERT_HTTP_REDIRECT"))":DIVERT_TCP_INBOUNDS:"";
constchar*f_tcpin=*pf_tcp_src?dp_list_have_autohostlist(¶ms.desync_profiles)?"("DIVERT_TCP_INBOUNDS" or ("DIVERT_HTTP_REDIRECT"))":DIVERT_TCP_INBOUNDS:"";
snprintf(iface,sizeof(iface)," ifIdx=%u and subIfIdx=%u and",IfIdx,SubIfIdx);
snprintf(iface,sizeof(iface)," ifIdx=%u and subIfIdx=%u and",IfIdx,SubIfIdx);
@ -823,6 +828,11 @@ static void exithelp(void)
" --nlm-filter=net1[,net2,net3,...]\t\t; enable winws only if any of specified NLM network is connected. names and GUIDs are accepted.\n"
" --nlm-filter=net1[,net2,net3,...]\t\t; enable winws only if any of specified NLM network is connected. names and GUIDs are accepted.\n"
" --nlm-list[=all]\t\t\t\t; list Network List Manager (NLM) networks. connected only or all.\n"
" --nlm-list[=all]\t\t\t\t; list Network List Manager (NLM) networks. connected only or all.\n"
" --filter-tcp=[~]port1[-port2]\t\t\t; TCP port filter. ~ means negation. setting tcp and not setting udp filter denies udp.\n"
" --filter-udp=[~]port1[-port2]\t\t\t; UDP port filter. ~ means negation. setting udp and not setting tcp filter denies tcp.\n"
"\nHOSTLIST FILTER:\n"
"\nHOSTLIST FILTER:\n"
" --hostlist=<filename>\t\t\t\t; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n"
" --hostlist=<filename>\t\t\t\t; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n"
" --hostlist-exclude=<filename>\t\t\t; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n"
" --hostlist-exclude=<filename>\t\t\t; do not apply dpi desync to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n"
@ -1304,24 +1302,24 @@ int main(int argc, char **argv)
e=strchr(p,',');
e=strchr(p,',');
if(e)*e++=0;
if(e)*e++=0;
if(!strcmp(p,"md5sig"))
if(!strcmp(p,"md5sig"))
params.desync_fooling_mode|=FOOL_MD5SIG;
dp->desync_fooling_mode|=FOOL_MD5SIG;
elseif(!strcmp(p,"ts"))
elseif(!strcmp(p,"ts"))
params.desync_fooling_mode|=FOOL_TS;
dp->desync_fooling_mode|=FOOL_TS;
elseif(!strcmp(p,"badsum"))
elseif(!strcmp(p,"badsum"))
{
{
#ifdef __OpenBSD__
#ifdef __OpenBSD__
DLOG_CONDUP("\nWARNING !!! OpenBSD may forcibly recompute tcp/udp checksums !!! In this case badsum fooling will not work.\nYou should check tcp checksum correctness in tcpdump manually before using badsum.\n\n");
DLOG_CONDUP("\nWARNING !!! OpenBSD may forcibly recompute tcp/udp checksums !!! In this case badsum fooling will not work.\nYou should check tcp checksum correctness in tcpdump manually before using badsum.\n\n");