如何使用 Telegram 发现用户的 IP 地址。

2025-05-27

如何使用 Telegram 发现用户的 IP 地址。

IP查找电报

如果你想知道 Telegram 和 WhatsApp 等即时通讯应用在对话背后是如何运作的,那么这篇文章正适合你。我们将探索一种利用强大的网络流量分析工具 Wireshark 获取 Telegram 上交互用户的 IP 地址的方法。

步骤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)
    }
}


Enter fullscreen mode Exit fullscreen mode

结论

通过使用 Wireshark 分析 Telegram 上的 STUN 流量,我们可以发现正在与之交互的用户的 IP 地址。这些信息可用于多种用途,例如检查用户的地理位置或识别潜在的网络问题。

然而,务必记住,用户隐私应始终受到尊重。这些技术的使用应符合道德规范,且在法律允许的范围内进行。

参考:

https://medium.com/@ibederov_en/find-out-the-ip-address-through-a-call-to-telegram-a899441b1bac

https://www.wireshark.org/

https://go.dev/

文章来源:https://dev.to/higordiego/how-to-discover-the-users-ip-address-using-telegram-4o59
PREV
HTML tags for SEO success Introducing HTML tags for SEO Conclusion
NEXT
全职工作的同时开展副业的 5 个技巧。