Pull to refresh

Comments 37

Спасибо за инфу. Кстати в одном пакете (пик 4) видно что за доска объявлений.

Всё равно видно, в hex-дампе ))

Кто не поленится перевести, для того не жалко ;)

UFO just landed and posted this here

Есть известный домен, который меньше него

Для тех, кому тоже интересно: 6175746f2e7275

Получилось подменить, но, к сожалению, следующий пакет возвращает ошибку "Получено непредвиденное сообщение или оно имеет неправильный формат".

Чего ж тут удивительного? Вы "поздоровались" списком расширений и шифронаборов от Хрома, тогда как по факту половина из них не поддерживалась клиентом. Вангую, что сервер ответил на приветствие, например, фактически неподдерживаемым шифронабором, а Ваш .NET, игнорируя указание сервера, использовал другой шифронабор. Казалось бы, что могло пойти не так? ;)

Как раз под капотом CycleTLS, используется эта либа. CycleTLS - более удобная обертка над utls, мне легче было подключить ее и немного подтюнить под свои нужды

Под .NET bouncy castle имеет полностью настраиваемый TLS клиент.

Верно, это был один из вариантов, но это только TCP. А как же обертка для работы с HTTP? Самому писать не очень хотелось, сроки поджимали, клиенты возмущались, к тому же не смог найти адекватное решение использование прокси

Реализовать HTTP 1.1 для цели скраппинга один вечер, вам же не все фичи нужны, а только запрос страниц последовательно. Прелесть старых протоколов в простоте.

Думаю, что если сайт ловит даже по TLS Fingerprint, то поведение тупых скачивалок должен засекать мгновенно.

HTTP достаточно сложный протокол, чтобы его на коленке сделать и это не очень сильно отличалось от поведения браузера. Тот же keep-alive уже большая боль.

В один день одна из крупных досок объявлений начала возвращать фейковые характеристики объявлений, когда понимала, что мы - бот.

И на что только люди не пойдут, лишь бы API не предоставлять.

Причем платную. Затраты с обеих сторон получаются на много выше.

И с помощью API можно контролировать данные. Многим даже контактные данные не нужны, достаточно самого факта появления нового объявления, далее клиент сам уже заходят на сайт.

Ведь как бы Сарочка ни легла, её всё равно отксрейпят. Но можно сделать это безболезненно для обеих сторон, предоставив API, а можно так, как описано в статье. В результате получается хуже для всех.

Кстати, под API-вызовы можно завести ноду, отдельную от сайта, обслуживающего юзеров. И содержать её за малую часть той самой платы-за-API.

Но нет: мыши, кактус, плак-плак.

Есть апи, но оно, к сожалению, нам не подходит. Запрашивать данные можно в очень маленьком количестве и раз в определенное время ~1час. Нам же нужно максимально быстро получать изменения/новые объявления

Ну так я и говорю: есть спрос (Вы). Почему на этот спрос нет предложения? У нас капитализмус или где?

Платёжеспособного спроса нет. Сайт свои данные оценивает в N миллионов рублей, т.е. в 10 руб. за один вызов API, а скрейперы хотят всё бесплатно.

Сайт свои данные оценивает в N миллионов рублей

Вы как теорию не знаете. "Ваши данные" стоят ровно столько, сколько за них готовы платить, независимо от того, что Вы там себе возомнили. Если за них не готовы платить — значит, они ничего не стоят.

Но на самом деле за эти данные платят — тем программистам, которые пишут скрейперы. И Вы вполне могли бы сказать — "мужики, чем платить программистам, лучше заплатите эти деньги мне, а я вам данные отдам без всяких извращений". Но жаба — она давит, и в результате получается известная картина про корову, только доит её не адвокат, а программисты.

Спасибо за статью! Встречал похожую проблему, но с CloudFlare, решение нашёл на просторах интернета

Решение заключается в использовании библиотеки BoringSSL

Достаточно просто сделать HTTP-сервер на плюсах с этой библиотекой(использовать libCURL) и перебрасывать запросы через него, и сайты будут думать что вы - браузер (BoringSSL используется в хромиуме)

Слышал, что BoringSSL используется в Andoid-е, но не думал, что и в хромиуме. Спасибо за информацию!

видимо работает не везде, да и client hello все же отличается

Спасибо за статью! Очень вовремя попалась )

Я пытался написать бота для шахмат, но так и не смог подключиться так, чтобы меня не распознали как бота. Видимо, вот в чем было дело🙃

За годы разработки парсеров крупных досок объявлений, встречались разные и довольно интересные защиты, нам есть чем поделиться. Если читателям хабра будет интересно, можно сделать еще несколько статей на эту тему

Если читателям хабра будет интересно, можно сделать еще несколько статей на эту тему

интересно, конечно, пишите

Очень интересно, пишите ещё. Огромное спасибо. Сам работаю в компании по скрапингу цен. Где нету API или http request банят, используем playwright. Браузеры chromium, chromium-headless, brave, brave-block, brave-headless. Иногда и старикан селениум с htmlunit выручает. Ну а так да, cloudflare самый проблематичный обойти.

Ого, впервые встретил человека с похожим бэкграундом. Очень приятно! Возможно следующая статья будет о том, как обойти ProofOfWork на сайтах

Да в мире скрапинга много чего интересного. Из таких странных блокировок, это когда заходишь на продукт напрямую (раньше не посещая этот сайт, без cookies, даже не incognito) и тебе прилетает бан. А если зайти на home -> продукт всё Ок! Кто это придумал? Или это такая фича datadome? Одним словом весело. Кто хочет попробовать сайт: 6361727265666F75722E6672. Может я тоже когда соберусь с мыслями и запилю пост на хабре, что-то интересное.

Одним из возможных вариантов управлять tls fingerprint является использование техники ssl bumping с помощью прокси squid.

Squid является полноценным http proxy, что позволяет использовать его не изменяя целевого кода на C#, просто указав в настройках http client.

Пример конфигурации

Не уверен, что такой подход позволит полностью мимикрировать hello client запрос под браузер, но даже банальное изменение cipher list в нашем случае приводило к проходу защиты bot detection по tls fingerprint.

Привет, а русский текст как-то можно заслать в проксю, если ссылка содержит поисковый &query=русский текст.
Вылетает ошибка

Sign up to leave a comment.

Articles