Итоги недели 18.08.25 – 24.09.25:
• Суммарно сэкономлено: 73,813 TRX (примерно $25,096)
• Количество транзакций через TronLess: 7,166
Сколько вы уже отдали на комиссии? TronLess помогает сохранить то, что ваше.
Переходите на экономию — всё просто.
В планах опубликовать модуль запросов с возможностью подмены отпечатка JA3. Грубо говоря, это полная замена текущего HTTP-клиента способная обходить CloudFlare (и не нужно узнавать IP сайта для обхода).
Среда: Node.js. Основа: CycleTLS, tough-cookie.
Так как Node.js даже в мгнопоточном скрипте запускается в одном экземпляре, полагаю сильных проблем с производительностью возникнуть не должно. Если ошибаюсь, пожалуйста, поправьте меня.
Что планируется реализовать или уже реализовано в первую очередь:
Моя прошлые идеи решения проблемы:
Недостатки использование CycleTLS:
@SecDeveloper said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
Недостатки использование CycleTLS:
А ещё он не все сигнатуры умеет менять, но это вроде лучшее что есть в паблике
Дело доброе дело хорошее, уже много раз поднимали этот вопрос. Я за .
@SecDeveloper он не все расширения ssl поддерживает, точно не поддерживает 41, и есть ещё другие проблемы там есть в issue.
@SecDeveloper BAS нужен любой шас модуль. Острый дефицит модулей ....
@SecDeveloper said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
"global.cookieStore[номер_потока]", но хотелось бы избежать глобальные переменные (пока в раздумьях).
В реалиях бас это нормально, более того если не использовать глобал для хранения своих функций, то при более чем 255 потоках если не ошибаюсь, нода в бас будет падать по таймауту даже при попытке вывести простой лог. Потому лично я костылю синглтоны в глобал... Раньше спасло то что модули в ноде кэшируются, но потом разработчик зачем добавил удаление кэша и пришлось городить костыли с глобал.
Про ошибку с потоками в Node.js и global читал. К счастью пока функций у меня не много и в случае чего переписать на "global" не составит труда. Пока главный вопрос: где хранить cookie потоков. Пока нацелился на глобальные переменные.
Если есть решения получше CycleTSL + Node.js. Буду рад выслушать и попытаться доработать. В ином случае продолжу текущую реализацию.
Еще очень интересно услышать про "libcurl-impersonate-win" и параметры, которые мне не удалось передать.
@SecDeveloper Кстати если нода по какой-то причине упадет по таймауту, может даже в чужом модуле или коде , то все куки слетят как и все другие состояния.
@SecDeveloper said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
@UserTrue, это да)) все переменные же в ноде. Но неужели она так часто отлетает?
Это может быть просто ошибка в чужом коде, например коде пользователя. Дело не в ноде
@UserTrue, Как правило, cookie сохраняют в конце скрипта. Если в коде пользователя появляется ошибка, то в таком случае он и с обычным HTTP-клиентом не сохранит cookie.
Насчет других состояний (конфиг и настройки). В текущей реализации для каждого запроса создается копия дефолтных настроек и только потом изменяется. Я пока не реализовал глобальную установку конфига и настроек для потока (возомжно, Вы говорите об их сбросе?). Большинство действий обернуто в
try{ ... } catch (e)
И целенаправленно положить ноду будет ну очень сложно. А то что при дотошных манипуляциях с настройками 1 потока можно положить все сразу - это понятно. Мне нужно как сумашедшему обрабатывать любые возможные неккоректные значения. Но возможно я неправильно понял?
@UserTrue said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
@SecDeveloper said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
"global.cookieStore[номер_потока]", но хотелось бы избежать глобальные переменные (пока в раздумьях).
В реалиях бас это нормально, более того если не использовать глобал для хранения своих функций, то при более чем 255 потоках если не ошибаюсь, нода в бас будет падать по таймауту даже при попытке вывести простой лог. Потому лично я костылю синглтоны в глобал... Раньше спасло то что модули в ноде кэшируются, но потом разработчик зачем добавил удаление кэша и пришлось городить костыли с глобал.
Получается в Node.js переменные и функции экспортированные через "module.exports" и подключаемые через "require" в многопотоке создают собственные копии и нагружают память этой кучей? Я правильно понимаю?
@SecDeveloper said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
@UserTrue, Как правило, cookie сохраняют в конце скрипта. Если в коде пользователя появляется ошибка, то в таком случае он и с обычным HTTP-клиентом не сохранит cookie.
Речь не только сохранение в файл, но и их наличии в процессе работы. В любой момент после падения процесса ноды их может не стать.
@SecDeveloper said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
И целенаправленно положить ноду будет ну очень сложно. А то что при дотошных манипуляциях с настройками 1 потока можно положить все сразу - это понятно. Мне нужно как сумашедшему обрабатывать любые возможные неккоректные значения. Но возможно я неправильно понял?
Процесс ноды общий для всего клиентского кода, его использует не только ваш модуль. И если он упадет в чужом модуле или коде то у вас все тоже улетит. А ещё в режиме записи достаточно просто открыть экшен ноды и процесс насколько я понимаю перезапускается. В общем вы не можете полагаться на его постоянство
@SecDeveloper said in Нужен ли такой модуль? (Кратко: запросы с подменой TLS (JA3)):
Получается в Node.js переменные и функции экспортированные через "module.exports" и подключаемые через "require" в многопотоке создают собственные копии и нагружают память этой кучей? Я правильно понимаю?
Вроде бы нет, но по какой-то магической причине через глобал работает и 500 потоков, а без него максимум 255 или около того. Я не изучал причину этого
@SecDeveloper делал ранее себе такой модуль но
@SecDeveloper я собирал и некоторый другой перечить решений, могу дать линк на пост
@Q_Q, был бы благодарен. Интересно посмотреть.
А пока что я пытаюсь понять, как управлять dll в BAS и подглядываю синтаксис C++. Явно не мой стек. Мб все-таки получится сделать чистое решение все с тем же многострадальным libcurl-impersonate, судя по тому, что решение с нодой ну не самое элегантное. Ноду я могу и сейчас успешно использовать, но собирать это в модуль для пользователей = разрабатывать костыль. Еще и в ноде костылить в глобал), а там после и все падать у пользователей может...
Так как любые состояния в Node.js ненадежны (могут слететь от действий пользователей в Node.js и от неожиданных ошибок в модуле), я принял решение не публиковать модуль. Проведенные тесты и сохранение состояний в глобальные переменные Node.js/файлы/переменные BAS меня не устраивают. Явно не подходит для стабильного массового использования. Это заранее полукостыль в реалиях BAS, хоть и по скорости производительный.
Кому это необходимо, можно с пониманием реализовать это самому в личных скриптах или, как уже упоминалось, использовать curl-impersonate с небольшими проблемами с производительностью (из-за нагрузки при запуске cmd).