По умолчанию Telegram устанавливает прямой канал связи при осуществлении
голосового вызова пользователя, присутствующего в адресной книге (в настройках
можно выборочно отключить использование P2P и направлять трафик только через
внешний сервер). При инициировании соединения для обхода NAT в Telegram
применяется протокол STUN (Session Traversal Utilities for NAT), который
передаёт информацию об адресах звонящего и принимающего звонок в поле
XOR-MAPPED-ADDRESS. Соответственно, если в настройках "Security and Privacy" не
отключён P2P, звонящий может узнать IP-адрес того, кому адресован звонок. Метод
подойдёт и для любых других приложений, использующих STUN.
Для определения IP-адреса следует во время осуществления вызова записать дамп
трафика в формате pcap, например, при помощи утилиты tcpdump или tshark, после
чего воспользоваться готовым скриптом
https://github.com/n0a/telegram-get-remote-ip/ или при помощи штатных утилит
проанализировать значение поля XOR-MAPPED-ADDRESS:
tshark -w dump.pcap -a duration:5
cat dump.pcap |
grep "STUN 106" |
sed 's/^.*XOR-MAPPED-ADDRESS: //' |
awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' |
awk '!seen[$0]++'
|