Telegram: получаем IP адрес собеседника

Wireshark и STUN
Однажды мне понадобилось определить IP адрес своего собеседника в мессенджере Telegram. Для этого я расчехлил Wireshark и обнаружил STUN трафик, который позволяет клиенту, находящемуся за сервером трансляции адресов, определить свой внешний IP-адрес, способ трансляции адреса и порта во внешней сети.
Проще говоря основное назначение STUN – дать возможность различным девайсам (за NAT’ом) узнать их public IP-адрес и найти пробросы портов.
Помимо всего прочего, в атрибутах указывается параметр XOR-MAPPED-ADDRESS, который содержит публичный IP адрес, мой и удаленного собеседника. Очевидно, что это зависит от направления пакета. Если фрейм летит мне, то XOR-MAPPED-ADDRESS содержит мой IP, если от меня – собеседника.

Автоматизация
Потратив немного времени решил автоматизировать процесс получения IP своего визави в Telegram с помощью консольной версии Wireshark – tshark.
Принцип работы довольно простой. После старта в течении 5 секунд идет дамп сетевого трафика на сетевом интерфейсе, затем конвертируется в текстовый формат с выделением двух IP из атрибута XOR-MAPPED-ADDRESS, где один из IP принадлежит нашему клиенту.

Сравниваем адреса с нашим публичным адресом и получаем IP адрес удаленного клиента. Бонусом скрипт делает host и предлагает запустить whois, так как не обязательно IP клиента будет принадлежать сотовому оператору. Это может быть и корпоративная сетка тоже.
Как узнать IP в Telegram?
- Устанавливаем Telegram desktop для Linux или Mac.
- Устанавливаем tshark (sudo apt install tshark или скачиваем Wireshark для macOS. tshark идет в комплекте).
- Звоним тому, чей IP адрес нам интересен. Обязательно дожидаемся ответа, так как до этого STUN не передает нужных нам атрибутов.
- Запускаем скрипт.
- Profit! Мы получили IP нашего Telegram собеседника!
- Можно класть трубку.
Установка и запуск
wget https://raw.githubusercontent.com/n0a/telegram-get-remote-ip/main/tg_get_ip.sh
chmod +x tg_get_ip.sh
sudo ./tg_get_ip.sh
PS. Возможна работа на Android смартфонах с termux и root доступом. Без него трафик не захватить. thshark на termux ставиться легко: pkg install root-repo && pkg install tshark.
Проект на github: https://github.com/n0a/telegram-get-remote-ip