Как блокировщики сайтов отличают трафик браузера?

При попытке открыть Кинозал.тв в любом браузере перебрасывает на заглушку РосКомНадзора.

Москва, провайдер ОнЛайм, OS X 10.11.2 El Capitan. DNS гугловские. Запрос браузера идёт по правильному адресу, к CloudFlare – на этот же ip ресолвится имя сайта и с зарубежных vps'ов. В ответ в браузеры приходит просто редирект на заглушку:
JsYFx.png

Если же проделать соединение не браузером, а telnet на порт 80, то всё работает как положено – возвращается html страницы безо всяких редиректов:
bEkM8.png

Это так же работает, если в telnet отправить все те же HTTP заголовки, что и шлёт браузер:
GET / HTTP/1.1
Host: kinozal.tv
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: uid=1234567; pass=XXXXXXXX; __cfduid=abcdefe0171f2defb37070b1428009916; stylet=0
Connection: keep-alive

Хотя заголовок про gzip лучше убрать, а то в терминал валится нечитаемый бинарный мусор компрессированного контента.

Пока единственная разница, которую вижу – во времени: в telnet от момента соединения до отправки заголовков проходит пара секунд, пока я вручную сделаю paste. В браузере это происходит за миллисекунды. Надо попробовать с curl..

Вопрос: почему запросы из telnet обходят механизм блокировки? (как заставить браузеры имитировать telnet в плане обхода блокировок тоже интересно, но, возможно, будет очевидным)

Upd. более тонко отловленная разница. Netcat с 1-секундной задержкой (-i 1) в ответ возвращает добавленный заголовок редиректа:
$ echo -ne 'GET / HTTP/1.1\r\nHost: kinozal.tv\r\n\r\n' | nc -i 1 kinozal.tv 80

yMo5Avd.pngБез секундной задержки, с вручную вставленным запросом (как в варианте с telnet) возвращает чистый html искомой страницы:
kg0bgkT.png

Похоже, дело во времени?
  • Вопрос задан
  • 2888 просмотров
Решения вопроса 1
https://habrahabr.ru/post/249433/ тут (в UPD) расписано как это работает, и самое главное - как это обойти.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
eri
@eri
Блокировщик смотрит первый пакет в момент установки соединения. Браузер посылает заголовки вместе с syn пакетом. Телнет же открывает соединение, потом блокировщик смотрит его, не находит домен и соединяет с сайтом, а потом соединение переходит в состояние эстаблишед и дальнейшие запросы не обрабатываются...

В браузерах есть опция быстрого открытия соединений - попробуй её отключить через флаги.
Ответ написан
Комментировать
edinorog
@edinorog
Троллей не кормить!
научить юзать торренты?
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ответ очевиден: на DNS-запрос заблокированного домена стоит подмена IP на сайт-заглушку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы