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

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

Рассказываю о том, как мне удалось определить IP адрес своего собеседника в Telegram при помощи аудио вызова в мессенджере. Плюс написал bash-скрипт для автоматизации.
Telegram: получаем IP адрес собеседника

Wireshark и STUN

Однажды мне понадобилось определить IP адрес своего собеседника в мессенджере Telegram. Для этого я расчехлил Wireshark и обнаружил STUN трафик, который позволяет клиенту, находящемуся за сервером трансляции адресов, определить свой внешний IP-адрес, способ трансляции адреса и порта во внешней сети.

Проще говоря основное назначение STUN – дать возможность различным девайсам (за NAT’ом) узнать их public IP-адрес и найти пробросы портов.

Помимо всего прочего, в атрибутах указывается параметр XOR-MAPPED-ADDRESS, который содержит публичный IP адрес, мой и удаленного собеседника. Очевидно, что это зависит от направления пакета. Если фрейм летит мне, то XOR-MAPPED-ADDRESS содержит мой IP, если от меня – собеседника.

Wireshark и протокол STUN

Автоматизация

Потратив немного времени решил автоматизировать процесс получения IP своего визави в Telegram с помощью консольной версии Wireshark – tshark.

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

Демонстрация работы скрипта

Сравниваем адреса с нашим публичным адресом и получаем IP адрес удаленного клиента. Бонусом скрипт делает host и предлагает запустить whois, так как не обязательно IP клиента будет принадлежать сотовому оператору. Это может быть и корпоративная сетка тоже.

Как узнать IP в Telegram?

  1. Устанавливаем Telegram desktop для Linux или Mac.
  2. Устанавливаем tshark (sudo apt install tshark или скачиваем Wireshark для macOS. tshark идет в комплекте).
  3. Звоним тому, чей IP адрес нам интересен. Обязательно дожидаемся ответа, так как до этого STUN не передает нужных нам атрибутов.
  4. Запускаем скрипт.
  5. Profit! Мы получили IP нашего Telegram собеседника!
  6. Можно класть трубку.

Установка и запуск

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