DEV Community

Higor Diego
Higor Diego

Posted on

104

Como descobrir o endereço IP do usuário usando Telegram.

Ip find telegram

Se você já se perguntou como funcionam os aplicativos de mensagens, como Telegram e WhatsApp, por trás das conversas, este artigo é para você. Vamos explorar uma maneira de descobrir o endereço IP do usuário com quem estamos interagindo no Telegram, utilizando o poderoso Wireshark, uma ferramenta de análise de tráfego de rede.

Passo 1: Baixando o Wireshark

Antes de começar, você precisa baixar e instalar o Wireshark em seu computador. Você pode encontrar o download no site oficial do Wireshark.

Certifique-se de escolher a versão compatível com o seu sistema operacional.

Passo 2: Filtrando o Tráfego STUN

Após abrir o Wireshark, você verá uma interface que captura o tráfego de rede em tempo real. Vamos filtrar o tráfego STUN, que é o protocolo utilizado pelo Telegram para a comunicação.
Na barra de filtros, clique no ícone de busca para abrir a opção de busca. Em seguida, selecione a opção "String" e digite "XOR-MAPPED-ADDRESS" na linha de busca.

Passo 3: Iniciando a Captura de Dados

Agora, estamos prontos para iniciar a captura de dados. Certifique-se de que o Wireshark esteja em execução e realize uma chamada via Telegram para o usuário com quem deseja descobrir o endereço IP.
Assim que o usuário atender a chamada, o Wireshark começará a exibir os dados capturados. Procure na lista por informações relacionadas ao protocolo STUN, e você encontrará o endereço IP do usuário que recebeu a chamada.

Passo 4: Identificando o Endereço IP
Para facilitar a identificação do endereço IP desejado, utilize a função de busca do Wireshark. Clique na opção "Find" e digite "XOR-MAPPED-ADDRESS" na linha de busca. O endereço IP do usuário aparecerá imediatamente após essa string.


Automatizando com Golang

Com o uso da linguagem de programação Golang, podemos automatizar todo o processo descrito acima. A seguir, apresentamos um código em Golang que realiza essa tarefa de forma eficiente e confiável:



package main

import (
 "fmt"
 "log"
 "os"
 "os/exec"
 "strings"
)

func main() {
 const CAP_PATH = "/tmp/tg_cap.pcap" // Caminho temporário para o arquivo de captura pcap
 const CAP_TEXT = "/tmp/tg_text.txt" // Caminho temporário para o arquivo de texto com informações
 const CAP_DURATION = "5"            // Duração da captura em segundos

 // Obter o endereço IP externo do dispositivo
 ipCmd := exec.Command("curl", "-s", "icanhazip.com")
 ipOutput, err := ipCmd.Output()
 if err != nil {
  log.Fatal("Falha ao obter o endereço IP:", err)
 }
 MY_IP := strings.TrimSpace(string(ipOutput))

 // Verificar se o Wireshark está instalado
 _, err = exec.LookPath("tshark")
 if err != nil {
  log.Println("[-] Wireshark não foi encontrado. Tente instalar o Wireshark primeiro.")
  log.Println("[+] Debian baseado: sudo apt-get install -y tshark")
  log.Println("[+] Baseado em RedHat: sudo yum install -y tshark")
  os.Exit(1)
 }

 fmt.Println("[+] Descobrindo o Endereço IP do Usuário no Telegram usando Golang")
 fmt.Println("[+] Iniciando a captura de tráfego. Aguarde", CAP_DURATION, "segundos...")

 // Iniciar a captura de tráfego com o Wireshark
 captureCmd := exec.Command("tshark", "-w", CAP_PATH, "-a", "duration:"+CAP_DURATION)
 captureOutput, err := captureCmd.CombinedOutput()
 if err != nil {
  log.Fatal("Erro na captura de tráfego:", err)
 }

 fmt.Println("[+] Tráfego capturado.")

 // Converter o arquivo pcap para um arquivo de texto legível
 convertCmd := exec.Command("tshark", "-r", CAP_PATH)
 convertOutput, err := convertCmd.Output()
 if err != nil {
  log.Fatal("Erro ao converter o arquivo pcap para texto:", err)
 }

 err = os.WriteFile(CAP_TEXT, convertOutput, 0644)
 if err != nil {
  log.Fatal("Erro ao escrever o arquivo de texto:", err)
 }

 fmt.Println("[+] Arquivo pcap convertido com sucesso.")

 // Verificar se o tráfego do Telegram está presente no arquivo de texto
 if strings.Contains(string(convertOutput), "STUN 106") {
  fmt.Println("[+] Tráfego do Telegram foi encontrado.")

  // Extrair o endereço IP do texto
  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("Erro ao extrair o endereço IP:", err)
  }

  TG_OUT := strings.TrimSpace(string(extractOutput))
  IP_1 := strings.Fields(TG_OUT)[0]
  IP_2 := strings.Fields(TG_OUT)[1]

  var IP string

  // Verificar se o endereço IP é o nosso ou do destinatário
  if MY_IP == IP_1 {
   IP = IP_2
  } else if MY_IP == IP_2 {
   IP = IP_1
  } else {
   IP = "[-] Desculpe. Endereço IP não encontrado."
   os.Exit(1)
  }

  // Obter informações de host para o endereço IP
  hostCmd := exec.Command("host", IP)
  hostOutput, err := hostCmd.Output()
  if err != nil {
   log.Fatal("Erro ao obter informações de host:", err)
  }

  fmt.Println("[+]")
  fmt.Println("[+] Endereço IP:", IP)
  fmt.Println("[+] Host:", strings.TrimSpace(string(hostOutput)))
  fmt.Println("[+]")

  // Limpar os arquivos temporários
  err = os.Remove(CAP_PATH)
  if err != nil {
   log.Fatal("Erro na limpeza:", err)
  }

  err = os.Remove(CAP_TEXT)
  if err != nil {
   log.Fatal("Erro na limpeza:", err)
  }

  fmt.Println("[+] Limpeza concluída.")
 } else {
  fmt.Println("[-] Tráfego do Telegram não foi encontrado.")
  fmt.Println("[!]")
  fmt.Println("[!] Execute este script somente >>>APÓS<<< a resposta.")
  fmt.Println("[!]")
  os.Exit(1)
 }

 fmt.Println("[?]")
 fmt.Print("[?] Executar whois", IP, "? (S/N): ")

 // Verificar se o usuário deseja executar o comando whois
 var answer string
 fmt.Scanln(&answer)

 if strings.ToUpper(answer) == "S" {
  whoisCmd := exec.Command("whois", IP)
  whoisOutput, err := whoisCmd.Output()
  if err != nil {
   log.Fatal("Erro ao executar o comando whois:", err)
  }

  fmt.Println(string(whoisOutput))
 } else {
  fmt.Println("[+] Tchau tchau!")
  os.Exit(0)
 }
}


Enter fullscreen mode Exit fullscreen mode

Conclusão

Utilizando o Wireshark e a análise do tráfego STUN no Telegram, podemos descobrir o endereço IP do usuário com quem estamos interagindo. Essa informação pode ser útil para diversos propósitos, como verificar a localização geográfica do usuário ou identificar possíveis problemas de rede.

No entanto, é importante lembrar que a privacidade dos usuários deve ser sempre respeitada. O uso dessas técnicas deve ser feito de maneira ética e dentro dos limites legais.

Referências:

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

https://www.wireshark.org/

https://go.dev/

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more