Как узнать IP-адрес пользователя с помощью Telegram с Golang.
Если вам когда-нибудь было интересно, как приложения для обмена сообщениями, такие как Telegram и WhatsApp, работают за кулисами ваших разговоров, эта статья для вас. Мы рассмотрим метод обнаружения IP-адреса пользователя, с которым мы взаимодействуем в Telegram, с помощью мощного инструмента анализа сетевого трафика Wireshark.
https://t.me/addlist/MUtJEeJSxeY2YTFi – папка с бесплатными ресурсами и обучающими каналами Golang
Шаг 1: Загрузка Wireshark
Прежде чем мы начнем, вам необходимо загрузить и установить Wireshark на свой компьютер. Скачать его можно на официальном сайте Wireshark.
Убедитесь, что выбрали версию, совместимую с вашей операционной системой.
Шаг 2: Фильтрация трафика STUN
После открытия Wireshark вы увидите интерфейс, фиксирующий сетевой трафик в реальном времени. Давайте отфильтруем трафик STUN, который является протоколом, используемым Telegram для связи.
В строке фильтра нажмите на значок поиска, чтобы открыть опцию поиска. Затем выберите опцию “Строка” и введите в строку поиска “XOR-MAPPED-ADDRESS”.
Шаг 3: Начало сбора данных
Теперь мы готовы начать захват данных. Убедитесь, что Wireshark запущен, и сделайте звонок через Telegram пользователю, чей IP-адрес вы хотите обнаружить.
Как только пользователь ответит на звонок, Wireshark начнет отображать захваченные данные. Просмотрите список в поисках информации, связанной с протоколом STUN, и вы найдете IP-адрес пользователя, принявшего звонок.
Шаг 4: Определение IP-адреса
Чтобы легко определить нужный IP-адрес, воспользуйтесь функцией поиска Wireshark. Нажмите на опцию “Найти” и введите в строку поиска “XOR-MAPPED-ADDRESS”. IP-адрес пользователя сразу же появится после этой строки.
Автоматизация с помощью Golang
Используя язык программирования Golang, мы можем автоматизировать весь процесс, описанный выше. Ниже приведен код на языке Golang, который выполняет эту задачу эффективно и надежно:
package main
import (
"fmt"
"log"
"os"
"os/exec"
"strings"
)
func main() {
const CAP_PATH = "/tmp/tg_cap.pcap" // Temporary path for pcap capture file
const CAP_TEXT = "/tmp/tg_text.txt" // Temporary path for text file with information
const CAP_DURATION = "5" // Capture duration in seconds
// Get the external IP address of the device
ipCmd := exec.Command("curl", "-s", "icanhazip.com")
ipOutput, err := ipCmd.Output()
if err != nil {
log.Fatal("Failed to get IP address:", err)
}
MY_IP := strings.TrimSpace(string(ipOutput))
// Check if Wireshark is installed
_, err = exec.LookPath("tshark")
if err != nil {
log.Println("[-] Wireshark not found. Try installing Wireshark first.")
log.Println("[+] Debian-based: sudo apt-get install -y tshark")
log.Println("[+] RedHat-based: sudo yum install -y tshark")
os.Exit(1)
}
fmt.Println("[+] Discovering User's IP Address on Telegram using Golang")
fmt.Println("[+] Starting traffic capture. Please wait for", CAP_DURATION, "seconds...")
// Start traffic capture with Wireshark
captureCmd := exec.Command("tshark", "-w", CAP_PATH, "-a", "duration:"+CAP_DURATION)
captureOutput, err := captureCmd.CombinedOutput()
if err != nil {
log.Fatal("Traffic capture error:", err)
}
fmt.Println("[+] Traffic captured.")
// Convert pcap file to readable text file
convertCmd := exec.Command("tshark", "-r", CAP_PATH)
convertOutput, err := convertCmd.Output()
if err != nil {
log.Fatal("Error converting pcap file to text:", err)
}
err = os.WriteFile(CAP_TEXT, convertOutput, 0644)
if err != nil {
log.Fatal("Error writing text file:", err)
}
fmt.Println("[+] Pcap file successfully converted to text.")
// Check if Telegram traffic is present in the text file
if strings.Contains(string(convertOutput), "STUN 106") {
fmt.Println("[+] Telegram traffic found.")
// Extract the IP address from the text
extractCmd := exec.Command("cat", CAP_TEXT, "|", "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]++'")
extractOutput, err := extractCmd.Output()
if err != nil {
log.Fatal("Error extracting IP address:", err)
}
TG_OUT := strings.TrimSpace(string(extractOutput))
IP_1 := strings.Fields(TG_OUT)[0]
IP_2 := strings.Fields(TG_OUT)[1]
var IP string
// Check if the IP address is ours or the recipient's
if MY_IP == IP_1 {
IP = IP_2
} else if MY_IP == IP_2 {
IP = IP_1
} else {
IP = "[-] Sorry. IP address not found."
os.Exit(1)
}
// Get host information for the IP address
hostCmd := exec.Command("host", IP)
hostOutput, err := hostCmd.Output()
if err != nil {
log.Fatal("Error getting host information:", err)
}
fmt.Println("[+]")
fmt.Println("[+] IP Address:", IP)
fmt.Println("[+] Host:", strings.TrimSpace(string(hostOutput)))
fmt.Println("[+]")
// Clean up temporary files
err = os.Remove(CAP_PATH)
if err != nil {
log.Fatal("Cleanup error:", err)
}
err = os.Remove(CAP_TEXT)
if err != nil {
log.Fatal("Cleanup error:", err)
}
fmt.Println("[+] Cleanup completed.")
} else {
fmt.Println("[-] Telegram traffic not found.")
fmt.Println("[!]")
fmt.Println("[!] Run this script only >>>AFTER<<< the response.")
fmt.Println("[!]")
os.Exit(1)
}
fmt.Println("[?]")
fmt.Print("[?] Run whois", IP, "? (Y/N): ")
// Check if the user wants to run the whois command
var answer string
fmt.Scanln(&answer)
if strings.ToUpper(answer) == "Y" {
whoisCmd := exec.Command("whois", IP)
whoisOutput, err := whoisCmd.Output()
if err != nil {
log.Fatal("Error running whois command:", err)
}
fmt.Println(string(whoisOutput))
} else {
fmt.Println("[+] Goodbye!")
os.Exit(0)
}
}
Заключение
Используя Wireshark и анализируя трафик STUN в Telegram, мы можем узнать IP-адрес пользователя, с которым взаимодействуем. Эта информация может быть полезна для различных целей, например, для проверки географического положения пользователя или выявления потенциальных сетевых проблем.
Однако важно помнить, что конфиденциальность пользователя всегда должна соблюдаться. Использование этих методов должно осуществляться с соблюдением этических норм и в рамках закона.
https://t.me/golang_interview/ – Golang разбор вопросов с собеседований в нашем телеграм канале.