*Эта статья — репост моей статьи с Facebook. Поэтому написана она для «простых смертных», не сильно разбирающихся в IT технологиях.
Итак, не вдаваясь в глубокие подробности и описания деталей организации сетевых протоколов. Как оператор может определить что вы работаете не только со смартфона?
Передача данных осуществляется при помощи специального протокола — TCP/IP. У IP есть такой параметр — TTL. Его имеет каждый пакет данных, который отправляется с устройства. И пока пакет дойдет до конечной точки, он проходит разные маршрутизаторы и прочие сетевые интерфейсы. И проходя через такое устройство, этот самый TTL уменьшается на единичку. Если на маршрутизатор попадает пакет с TTL = 1, он становится равным 0 и пакет «умирает». Изначальный TTL исходящего пакета с вашего устройства, задается параметрами операционки. Для Windows обычно это 128. То есть, все исходящие пакеты имеют TTL=128.
Но самое интересное не в этом. А в том, как пользуется этим провайдер — оператор сотовой сети. Все устройства подключенные через ваш телефон, будут иметь TTL на единичку меньше, чем установлено в параметрах операционки устройства. То есть, даже если TTL у телефона и у компа, подключенного через телефон одинаковые, то до провайдера, пакет с компа будет долетать с TTL на единичку меньше, потому что эту единичку «отберет» ваш телефон, пропуская пакет через себя. А дальше, провайдер видит, что пакеты от вас летят с разным TTL и отшибает пакеты с компа. И тут недостаточно просто поменять TTL на что-то «от балды». Тут нужно компу поставить TTL на единичку больше, чем у телефона.
Как это сделать? Не очень просто, но и не очень сложно. Для начала, нужно узнать TTL телефона. Идем в AppStore или Google Play и ищем там «Ping». Вам нужна какая-нибудь программа, умеющая делать ping.
Что это и зачем, даже объяснять не буду, это не важно. У меня на iPhone есть программа iNetTools, ping там первая же вкладка.
Дальше, нам нужно «пингануть» сам телефон, то есть, адрес 127.0.0.1. Запускаем программу для пинга, ищем вкладку «ping», пишем адрес сервера 127.0.0.1 и запускаем пинг. В качестве результата, будут строчки вроде
64 bytes from 127.0.0.1: icmp_seq=570 ttl=32 time=0.050 ms
Вот ttl нам и нужен. У моего телефона он был равен 32. Значит на компе мне нужен TTL = 33.
Дальше, дело техники. Для MacOS и Linux команда для изменения ttl одна и та же — открываем консоль и пишем
sudo sysctl -w net.inet.ip.ttl=33
Для Windows чуть сложнее, нужно отредактировать (или добавить) в реестре параметр (REG_DWORD DefaultTTL) в ветке (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters). Windows нужно будет перезагрузить. Linux или MacOS — не нужно. Через другие Wi-Fi сети, компьютер с измененным TTL, будет работать как обычно. Обратно можно не менять.
И да, жлобство и маркетинговые уловки, это плохо!