Добавить новые возможности
Предложения по расширению функционала и улучшению zapret
Проблема с длиной команды есть только у ash в интерактивной оболочке. Ее нет на уровне ОС и ее нет в скриптах, обрабатываемых ash.
На счет autolist. У него есть режим дебага. надо смотреть лог. Проблема может быть и в другом. В апгрейде броузера или во включении ECH на cloudflare, например. Надо проверки все начинать с curl. Он более предсказуем по каким протоколам и куда он полезет.
Все остальное это обьемные и сложные изменения, до которых руки вряд ли дойдут в обозримом будущем
@bol-van а можно пожалуйста хотябы первый пункт реализовать в новой версии? Добавить к примеру параметр --hosts= где через запятую или пробел будет список сайтов (очень нужно), кастыли через /dev/stdin или fifo не прокатывают на урезанных линуксах
пока есть более важное, а это не приоритетно
пока есть более важное, а это не приоритетно
Нее, никто тебя не гонит, просто по мере времени, возможностям и желанию)
Начял разбираться с tpws для тех у кого урезанные iptables не тянут NFQUEUE, и кроме как разделить пакет на чясти и поменять эти чясти местами в tpws больше ничего сделать нельзя, в следствии чего не каждый DPI получиться пробить. Если будет время и желание можно реализовать програмно в tpws все методы которые есть в nfqws?
Ещё парочка моментов по nfqws/tpws (речь не о fake) Можно ли добавить опцию модификации SNI? Также добавить модификацию HTTP заголовков с регулярными выражениями? Те методы которые присутствуют на данный момент не прокатывают, причём судя по тому что никто не использует их в конфигах не только у меня. Заменить их все на одну опцию к примеру --http-headers, чтобы можно было менять в них что угодно и как угодно, к примеру теже опции --hostdot и --hosttab добавляют точку и tab вконце домена, а ведь туда можно ещё много чего добавить что теоретически может прокатить к примеру поставить точку не в конце домена а в начяле или добавить .localhost вконце домена, или через ; или пробел после домена добавить второй не заблокированный домен, с расчётом что DPI его пропустит а сервер не станет с него блевать. Да и с темже GET тоже поэксперементировать, щяс возможно только пустую строку перед GET добавить и то только в TPWS, а можно ведь добавить какиенибуть байты чтобы DPI не воспринимал пакет как http что кстати скорей всего прокатит, но то что это нормально прожуёт сервер не факт, такто скорей всего можно будет подобрать то что прожуёт сервер надо эксперементировать.
tpws умеет tlsrec. тоже неплохое средство, которое в nfqws реализовать невозможно. но tpws практически беззащитен перед анализом ответа сервера. TLS1.2 он часто пробить не в состоянии. TLS модицифировать невозможно. только если делать MiTM да и сервера не примут левый SNI что конкретно нужно модифицировать в http заголовках, что может чем-то помочь ? если бы можно было что-то еще добавить, что не сломало бы протокол, об этом бы написали уже. http к тому же уже мало актуален. если вам удастся создать запрос, который что-то пробивает и корректно обрабатывается сервером, я рассмотрю
но надо понимать, что nfqws не может добавить ничего в поток, что изменит длину а tpws не может работать на уровне отдельных пакетов иначе, чем насилуя не предназначенный для этого socket api. возможности ограничены
если вам удастся создать запрос, который что-то пробивает и корректно обрабатывается сервером, я рассмотрю но надо понимать, что nfqws не может добавить ничего в поток, что изменит длину
--methodeol; добавить перевод строки перед методом : "GET /" => "\r\nGET /" в tpws она есть, в nfqws её нету, онако метод прокатывает. Достаточно байта 0x0A перед GET, чтобы не изменять длинну можно удалить пробел между Host: и доменом У меня прокатило=) Время будет ещё поэксперементирую, скину рабочие варианты
P.S. Проблему с длинной разве нельзя решить указанием новой длинны пакета и новой контрольной суммой?
Да , так можно сделать, но потребуется откуда-то еще выкусить эти 2 байта, чтобы длина осталась такой же. Суммы поправить можно, но весь последующий поток поедет по sequence. Чтобы его стабилизировать, придется во всех последующих пакетах входящих и исходящих редактировать sequence, что представляется задачей тяжелой и глупой. Сродни переписыванию части ОС. Зачем, когда есть для этого tpws ?
Кстати, вариант на http гнать tpws, а на https - nfqws - совершенно нормальный, и легко реализуется под *nix с текущими скриптами запуска
Да , так можно сделать, но потребуется откуда-то еще выкусить эти 2 байта, чтобы длина осталась такой же.
Дак общий размер заголовков же не изменяется, 1 байт \n добавили, другой байт (пробел после Host:) убрали
2 байта. \r\n там вообще. \n только в варианте unixeol. это дополнительное издевательство. Можно откуда-нибудь выдернуть. Депробелизировать 2 хедера. Но зачем ? Вижу смысл только для винды, где tpws нет
2 байта. \r\n там вообще. \n только в варианте unixeol. это дополнительное издевательство. Можно откуда-нибудь выдернуть. Депробелизировать 2 хедера. Но зачем ? Вижу смысл только для винды, где tpws нет
Там кстати и только с \r тоже работает ещё вместо GET прокатывает PRE, но не везде На cloudflare прокатывает, а через него щяс практически все сайты проходят
Действительно, прокатывает. Но только на cloudflare. Это что-то не стандартное. Гугл не находит.
Действительно, прокатывает. Но только на cloudflare. Это что-то не стандартное. Гугл не находит.
Дак Я об этом в самом начяле и говорил, что можно нестандартные заголовки использовать и что из того что ещё не проверил в них прокатит можно только гадать и эксперементировать. Если чтото длинное использовать то можно к примеру будет user-agent по маске сократить чтоб вмещялось Не только на cloudfare, на duckduckgo.com PRI прокатывает, на других сайтах тоже, но как повезёт
Есть какая-то инфа о методе PRE ? Откуда он вообще взялся ? В исходниках nginx ничего такого не находится
Есть какая-то инфа о методе PRE ? Откуда он вообще взялся ? В исходниках nginx ничего такого не находится
Сорри, опечятка PRI
PRE тоже сработало. а PRI в nginx тоже нет. По ходу там ни PRI, и не PRE, а что угодно нестандартное считается как GET
По ходу там ни PRI, и не PRE, а что угодно нестандартное считается как GET
Да, Я щяс специально от балды туда рандома отправил, хавает всё что заглавными буквами написано
По ходу это фишка nginx. lighttpd такое не хавает
Там в конце, если стандартный метод не найден, идет проверка , что метод содержит буквы A-Z, символы _ или -, и если это так, то возвращает NGX_OK
static ngx_int_t
ngx_http_v2_parse_method(ngx_http_request_t *r, ngx_str_t *value)
{
size_t k, len;
ngx_uint_t n;
const u_char *p, *m;
/*
* This array takes less than 256 sequential bytes,
* and if typical CPU cache line size is 64 bytes,
* it is prefetched for 4 load operations.
*/
static const struct {
u_char len;
const u_char method[11];
uint32_t value;
} tests[] = {
{ 3, "GET", NGX_HTTP_GET },
{ 4, "POST", NGX_HTTP_POST },
{ 4, "HEAD", NGX_HTTP_HEAD },
{ 7, "OPTIONS", NGX_HTTP_OPTIONS },
{ 8, "PROPFIND", NGX_HTTP_PROPFIND },
{ 3, "PUT", NGX_HTTP_PUT },
{ 5, "MKCOL", NGX_HTTP_MKCOL },
{ 6, "DELETE", NGX_HTTP_DELETE },
{ 4, "COPY", NGX_HTTP_COPY },
{ 4, "MOVE", NGX_HTTP_MOVE },
{ 9, "PROPPATCH", NGX_HTTP_PROPPATCH },
{ 4, "LOCK", NGX_HTTP_LOCK },
{ 6, "UNLOCK", NGX_HTTP_UNLOCK },
{ 5, "PATCH", NGX_HTTP_PATCH },
{ 5, "TRACE", NGX_HTTP_TRACE },
{ 7, "CONNECT", NGX_HTTP_CONNECT }
}, *test;
if (r->method_name.len) {
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
"client sent duplicate :method header");
return NGX_DECLINED;
}
if (value->len == 0) {
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
"client sent empty :method header");
return NGX_DECLINED;
}
r->method_name.len = value->len;
r->method_name.data = value->data;
len = r->method_name.len;
n = sizeof(tests) / sizeof(tests[0]);
test = tests;
do {
if (len == test->len) {
p = r->method_name.data;
m = test->method;
k = len;
do {
if (*p++ != *m++) {
goto next;
}
} while (--k);
r->method = test->value;
return NGX_OK;
}
next:
test++;
} while (--n);
p = r->method_name.data;
do {
if ((*p < 'A' || *p > 'Z') && *p != '_' && *p != '-') {
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
"client sent invalid method: \"%V\"",
&r->method_name);
return NGX_DECLINED;
}
p++;
} while (--len);
return NGX_OK;
}
Но все равно польза этого метода очень точечная. Во-первых, сервер должен работать по http и не редиректить на https. Таких уже мало. Во-вторых, там должен быть nginx. Их много, но не все. И ддос гуарды наверно не пропустят. В-третьих, с POST уже ничего не сделать. Любая форма и приехали
В-третьих, с POST уже ничего не сделать. Любая форма и приехали
Значит пока вариант с \n остаётся и удалением пробела после host: чтобы байт освободить, Я рандомные сайты почекал, пока ещё ниодин ошибок не выдал что на GET что на POST, при этом DPI пробивают
В mdig кастомный DNS не помешал бы, с игнорированием тех которые в resolv.conf если опция задействована.
Возможность устанавливать TTL в nfqws не только для десинхронизирующих пакетов но и для обычных. А то с изменением TTL средствами системы возникают проблемы К примеру iptables -t mangle -I POSTROUTING -j TTL --ttl-set 64 независимо добавлено до или после перенаправления на nfqws изменяет TTL для всех пакетов в том числе и фейковых. На урезанных iptables где отсутствует -j TTL, попытка использовать кастыль nfqttl в связке с nfqws приводит к тому что вобще интернет перестаёт работать
менять ттл для всего подряд это несвойственная функция, не имеющая отношения к обходу блоков выделить генерированные пакеты легко десинк марк правда он будет не только у фейков, но и всех генеренных в тч реинжект оригинала но это тоже решаемо если надо исключить сет ттл для фейков с ттл достаточно поставить условие ттл от 1 до 60, например
менять ттл для всего подряд это несвойственная функция, не имеющая отношения к обходу блоков
Косвенно отношение имеет, на недобросовестных мобильных операторах блокируется раздачя интернета через вайфай, лечиться сменой TTL
достаточно поставить условие ттл от 1 до 60, например
Не прокатило, отсутствует -m ttl в iptables
@bol-van у тебя есть желание ещё одним проектом заняться? Сделать аналог Privoxy с расширенной обработкой контента, с возможностью использовать переменные и их обработку, а то у Privoxy и всего чего удалось нагуглить работает только аналог команды sed с заменой контента по регулярным выражениям, чего при работе с напрочь засранными сайтами коих становиться только больше уже не достаточно. Там проще создать новый шаблон сайта с минимально необходимыми скриптами для работы чем перелопачивать всё дерьмо которое там понапихано. На Privoxy люди пробовали лепить кастыли, подгружать код и скрипты из папки /doc но всёравно фигня получяется потомучто нет возможности работы с переменными. Я пробовал через Lighttpd трафик пускать с обработкой его lua скриптами, но Lighttpd начинает проц прилично жерать, да и возможности lua там ограничены.
Чем это поможет, если все https ? И какова цель ? Не лучше ли browser extension ? Трафик надо менять там, где он расшифрован
Чем это поможет, если все https ? И какова цель ? Не лучше ли browser extension ? Трафик надо менять там, где он расшифрован
Насчёт SSL можно MITM использовать и сертификат подменять, в Privoxy это есть. Цель полноценно пользоваться популярными сайтами созданными быдлокодерами. Например ВК, Авито, чястично тотже гитхаб можно в этот список уже внести, ибо изза туевой хучи JS он уже подглючивать начинает. Всё это дерьмо сильно грузит браузеры, да и не каждый браузер способен его переварить, причём паразиты делают так что если блочиш какието внешние скрипты которые являются трекерами или рекламой то сайт тупо перестаёт работать - самый наглядный пример Авито, который изза малейшей ерунды сразу ошибку выдаёт. Задача поиск конкретных фрагментов из оригинального кода страницы и подстановка их в имеющийся пользовательский шаблон, после чего вывод этого шаблона вместе с данными вместо оригинальной страницы сайта. Пока что таких проектов не встречял, хотя сделать не сложно.
Насчёт браузерных модулей вобще не вариант, у них черезмерно низкий КПД (много ресурсов жерут), и кроме как заблокировать внешние скрипты или скрыть чясть контента больше ничего не могут, при этом html код толком не вычищяют. Поэтому щяс Privoxy юзаю, но его функционала уже не хватает, ибо сайты засраны настолько что проще вставить нужный контент в нормальный шаблон чем всё это дерьмо вычищять.
У расширений гораздо больше возможностей. Они работают не с raw потоком, а с уже распарсенным HTML и JS. Сделать расширение намного проще. Разве не так ? В любом случае вмешательство в разные сайты это неблагодарная задача, требующая постоянной траты ресурсов для анализа и обновления определений. Так, как это сделано в блокировщиках рекламы
MitM это практически гвоздь в крышку гроба. Мало кто его станет делать. Пара-тройка гиков
Сделать расширение намного проще. Разве не так ?
КПД у них очень низкий, тотже ADBlock браузер грузит прилично при этом всегото сверяет списки и меняет или удаляет чясть кода на страницах. Privoxy потребляет максимум несколько процентов от того что потребляет ADBlock на браузере. В случяе реализации шаблонов проект может раза в полтора больше чем Privoxy будет жерать ресурсов, но зато освободиться туева хучя ресурсов потребляемых браузером. К примеру у меня щяс на браузере открыта только данная страница гитхаба где пишу, из расширений стоит только NoScript при этом браузер уже использует свыше 300мб ОЗУ, несмотря на то что использую Basilisk который от фоксовского дерьма почищен.
В любом случае вмешательство в разные сайты это неблагодарная задача, требующая постоянной траты ресурсов для анализа и обновления определений. Так, как это сделано в блокировщиках рекламы
Люди найдутся быстро, тотже ВК к примеру туева хучя народу юзает, как минимум человек 500 гарантировано станут шаблонами пользоваться, те кто разбирается оперативно в течении чяса смогут в случяе чего изменения внести и скинуть актуальный скрипт/шаблон в дискуссии к примеру.
Просто уже настали времена когда людям нужно не блокировать дерьмо на сайтах, а вытаскивать нужные данные из дерьма. Подобных проектов пока ещё нигде нет
MitM это практически гвоздь в крышку гроба. Мало кто его станет делать. Пара-тройка гиков
Можно и по http сайты с браузера юзать, по https уже сам прокси будет подключяться. В код шаблона можно накрайняк пару строк на html добавить, чтоб уведомление вылазило если с сертификатом чтото нетак будет. И даже кнопки продолжить и отмена с get запросом который прога будет обрабатывать.
P.S. Для наглядности выкладываю скрин. Столько дерьма без поломки сайта не очистит ниодин из существующих на данный момент фильтров или блокировщиков рекламы, а уж темболее браузерные расширения.
Несколько предложений по сокращению количества опций (а то их слишком много становиться)
-
Можно убрать опцию --socks в tpws ? Сделать автоматический выбор типа прокси (tproxy или socks) на основании входящих на порт пакетов, ответные клиенту пакеты будут подгоняться под тип входящих пакетов к примеру до истечения --local-tcp-user-timeout=
-
Обьединить опции --hostlist= и --hostlist-domains= тоже самое с exclude списками доменов. Автоматически определить тип (файл или текст) можно по символам присутствующих в параметре / = файл , = текст также можно и со списками ipset домены обьединить, по маске их различять
-
Имеется опция --skip которая пропускает стратегию, можно вместо неё добавить символ отрицания? К примеру --!new пропускает стратегию, --dpi-desync=fake,!split2 пропускает метод split2 и использует только fake и т.д. для всех остальных параметров.