• Как оператор сотовой связи понимает, что сим-карта выдаёт интернет на смартфон или на роутер/USB-модем?

    @yaror
    10 лет в мобильном телекоме
    Уже немного обсуждалось здесь:
    Работа роутера?

    Ещё раз повторюсь, немного творчески переработав ответ.
    Детекцию раздачи трафика можно условно разделить на несколько рубежей.

    1. Рубеж первый
    Каждое устройство в сотовой сети в момент регистрации сообщает сети свой IMEI - код устройства, по которому можно однозначно определить модель Вашего устройства.

    Да, нужна база IMEI с device capabilities - описанием того, что это за устройство и что оно умеет. Но она у мобильного оператора уже есть: Вам, когда Вы впервые вставляли сим-карту в новый телефон, прилетали SMS-кой настройки интернета? Настройки у разных производителей немного разные, поэтому надо знать модель абонентского аппарата.

    Получается, что как только ты вставляешь сим-карту в Wi-Fi-роутер, оператор сразу понимает, что это роутер, а значит, он будет раздавать интернет через Wi-Fi.
    Реализация этой технологии оператору обходится совершенно бесплатно.

    2. Второй рубеж: анализ TTL.
    Надо понимать, что на первом рубеже будут отловлены только собственно роутеры, а включенная в настройках телефона точка доступа Wi-Fi оператору не видна.
    Но есть уловка: устройство, раздающее интернет по Wi-Fi, по умолчанию будет уменьшать поле TTL на всех проходящих через него ip-пакетах.
    Зная типичные начальные значения TTL для мобильных платформ, можно реагировать на все прочие значения как сигнал, что здесь где-то притаился Wi-Fi.
    Для реализации этого, оператору уже потребуются дополнительные расходы.
    Понятно, что ставить отдельное устройство для отлова любителей Wi-Fi никто не будет, поэтому обычно этим занимается операторский DPI - комплекс, занимающийся классификацией и "раскраской" абонентского трафика, благодаря которому и становятся возможны, скажем, отдельные условия тарификации социальных сетей.
    Кстати, удивительно, но, во-первых, не все DPI это умеют (Эриксон, вам же стыдно, да?). Во-вторых, те, что умеют, умеют это за отдельные деньги в виде подлежащей покупке лицензии.

    3. Рубеж третий: эвристика
    Тема интересная и увлекательная.
    Да, абонент может поменять IMEI прямо в настройках телефона.
    Да, абонент может перепрошить телефон, чтобы тот не трогал TTL.
    Но, как только хитрых абонентов становится много, оператору становится выгодно вкладываться в расширенный анализ трафика на том же DPI.
    Итак, что можно сделать?
    Ну, сходу:

    3.1. Вы выходите в интернет прямо с телефона через встроенный браузер? Поздравляем, Вы только что в поле User-Agent протокола HTTP рассказали оператору, какая у вас мобильная платформа, и какой версии!
    Как так, с одного устройства оператор видит разные User-Agent, указывающие то на Android, то на Apple? Ребята, да у вас там Wi-Fi!

    3.2. TCP/IP fingerptinting. Разные мобильные платформы (те же Android/Apple) используют разные начальные значения полей в ip-пакетах. Да взять хоть тот же TCP Window size! Анализируя их, можно угадать как минимум производителя платформы. А комбинируя это с тем же анализом по IMEI...
    Ребята, а как так: само устройство у вас от Apple, а значения полей в ip-пакетах характерны для Windows Phone?
    Или почему ваш трафик похож то на Android, то на Blackberry?

    Понятно, что эвристический анализ реализован тем более не на каждом DPI, и за тем более отдельные деньги за лицензию. Да и производительность подобный анализ просаживает очень здорово...
    Однако, технические средства уже есть и, как только они начнут окупаться финансово, оператору становится выгодно их внедрять.
    Ответ написан
    6 комментариев
  • Очень доступным языком о Long-Polling?

    planc
    @planc
    поковыряй пример https://socket.io/

    long polling используется, если клиент не может использовать websocket

    фишка в том, что вместо постоянного флуда новыми соединениями

    - есть что новое ?
    - нету !
    - есть что новое ?
    - нету !
    - есть что новое ?
    - { 'user': 'вася', 'message': 'привет'}
    - есть что новое ?
    - нету !

    происходит:
    - есть что новое
    ...
    ...
    ...
    ...
    - { 'user': 'вася', 'message': 'привет'}
    - есть что новое ?
    ...
    Ответ написан
    5 комментариев
  • Doctrine ORM в чём разница между EntityManager->merge() и EntityManager->persist()?

    Stafox
    @Stafox
    Web developer со всеми вытекающими...
    Мерж здесь абсолютно не нужен. Тот кто его использовал в этом месте не имеет полного представления как работает доктрина.

    Мерж может использоваться, когда сущность была задетачена, и ее снова нужно добавить как отслеживаемую в энтити менеджер. И да, это будет новый объект с новым spl object hash’ом
    Ответ написан
    Комментировать
  • Что такое core.autocrlf и core.safecrlf?

    @Holfamer Автор вопроса
    Настройка core.autocrlf с параметрами "true" и "input" делает все переводы строк текстовых файлов в главном репозитории одинаковы.
    core.autocrlf true - git автоматически конвертирует CRLF->LF при коммите и обратно LF->CRLF при выгрузке кода из репозитория на файловую систему (используют в Windows).
    core.autocrlf input - конвертация CRLF в LF только при коммитах (используют в Mac/Linux).

    Если core.safecrlf установлен на "true" или "warm", Git проверяет, если преобразование является обратимым для текущей настройки core.autocrlf.
    core.safecrlf true - отвержение необратимого преобразования lf<->crlf. Полезно, когда специфические бинарники похожие на текстовые файлы.
    core.safecrlf warn - печать только предупреждение, но принимает необратимый переход.

    Более полная инфа:
    core.autocrlf
    core.safecrlf
    Ответ написан
    Комментировать
  • Как правильно именовать таблицы, столбцы в базе данных?

    JohnnyGat
    @JohnnyGat
    Стараюсь писать код, понятный человеку.
    SQL Style Guide - www.sqlstyle.guide
    Перевод на русский - www.sqlstyle.guide/ru
    Ответ написан
    6 комментариев
  • Где сейчас дешёвые в продлении домены .RU (не шарага)?

    yur1ch
    @yur1ch
    Начинаю рисовать ;)
    пользуюсь webhost1, ТП на уровне, цены по 100рублей
    Ответ написан
    2 комментария
  • 1с битрикс-AD(ldap)-не пускает пользователей?

    Делал пару интеграций с AD, но на такие грабли не наступал. А что вообще у вас в логах пишется, по обе стороны?
    Ответ написан
    4 комментария
  • Как изменить все ID в таблице?

    Melkij
    @Melkij
    PostgreSQL DBA
    set @i := -1;
    update tablename set id = (@i := @i+1 ) order by id;

    Под рукой нет mysql, чтобы проверить синтаксис. По памяти - так.
    Ответ написан
    3 комментария
  • Как изменить все ID в таблице?

    @art_karetnikov
    Лучший мой проект: Мобильный банк Сбербанка РФ.
    Это все возможно, но похоже на ошибку, которую часто делают новички. Сбился айди, не по порядку? Да и хрен с ним. Он и не должен быть по порядку, не в этом его смысл. А вот если на него есть ссылки, а вы эти ссылки погубили - то сейчас надо исправить апдейтом, а впредь использовать форейн кей.
    Ответ написан
    1 комментарий
  • На что намекает галочка возле корневой папки проекта в PhpStorm

    DWSVad
    @DWSVad Автор вопроса
    Вообщем долго шарил по статьям посвященным phpStorm, в итоге нашел ответ в статье azverin: Продуктивное использование PHPStorm. Спасибо тебе, azverin за нее.

    Как оказалось это закладка, которую я случайно поставил на корневую папку.
    А ставить ее можно на любое место в проекте и части кода файла, с помощью F11.
    И так же легко просмотреть список закладок комбинацией Shift+F11.
    (Приведенные сочетания клавиш — дефолтные)
    Ответ написан
    1 комментарий
  • Как в PhpStorm выключить сканирование поддиректорий при создании проекта?

    miraage
    @miraage
    Старый прогер
    IDE Settings > File Types > Ignore files and folders (внизу)
    Ответ написан
    Комментировать
  • Как в PhpStorm выключить сканирование поддиректорий при создании проекта?

    denver
    @denver
    Хм… ну например File / New project from existing sources, там выбираем или:
    1. первый пункт (на последнем шаге выбираем [x] Review PHP settings и жмем далее и попадаем на функционал исключения),
    или
    2. второй пункт (на последнем шаге попадаем на функционал исключения)
    Ответ написан
    1 комментарий