jueves, 1 de septiembre de 2011

Cómo conseguir la IP de tus contactos de Windows Live Messenger

Buenas, en muchos sitios se dice cómo es posible obtener la IP de un contacto de Messenger enviándole un fichero y mirando con netstat las conexiones.

Aquí voy a mostrar cómo es posible hacerlo sin enviar ningún fichero. Y obtener no solo la IP pública sino también las IPs internas de sus adaptadores de red. Se hará de forma manual, usando netstat, después usando Wireshark y por último expondré un programa que he realizado que automáticamente muestra las IPs de los contactos según se van obteniendo.

Lo primero que debemos saber es cómo funciona Messenger por encima. La autenticación la realiza conectándose a los servidores de Microsoft vía SSL. Una vez autenticado todas las conversaciones pasan por los servidores de Microsoft sin ningún tipo de cifrado (así que cuidado con utilizar Messenger en redes inseguras).

Un tema aparte es como se envían entre los contactos ficheros, imágenes, avatares y emoticonos. Para ello Messenger utiliza un protocolo p2p. Así que cuando un contacto solicita por ejemplo nuestro avatar se inicia una negociación entre nosotros y el contacto para ver cómo es posible realizar la conexión. En este punto ambas partes se intercambian las IPs internas y externas, puertos, tipo de conexión, si usamos NAT, UPnP, etc…

En en este punto a donde podemos aprovecharnos para saber la IP del otro contacto.


Con netstat

La opción más fácil es utilizar netstat para monitorizar las conexiones y ver las nuevas conexiones que realiza el proceso del Messenger. Vamos a ello. Todo desde la consola.

El proceso encargado de las comunicaciones de Messenger es wlcomm.exe. Así que obtenemos su PID:

tasklist | find "wlcomm.exe"

Ahora con el PID podemos filtrar la salida de netstat para quedarnos solo con las conexiones que realiza dicho proceso(requiere permisos de administrador):

netstat -nabo | find "PID_ENCONTRADO"
image

Ahora en este punto iniciamos una conversación con el contacto del que nos interesa saber la IP y le enviamos un emoticono personalizado, para no levantar sospechas lo mejor es un emoticono transparente o blanco. Se iniciará la negociación entre los dos clientes y se iniciará la conexión. Volvemos a lanzar el comando anterior y veremos una nueva conexión de nuestro contacto.

image


Con Wireshark

Vamos a filtrar los paquetes obtenidos por Wireshark para quedarnos con aquellos donde se realiza la negociación entre dos contactos. De ahí cogeremos la IP externa y las internas.

Wireshark ofrece el filtro “msnms” para quedarnos con los paquetes del procolo de Messenger.

image

Mirando paquete a paquete en uno de ellos encontraremos algo así:

image

Fijaos en estas cadenas:
“srddA-lanretxE4vPI” Dando la vuelta a la cadena: IPv4External-Addrs
“srddA-lanretnI4vPI” –> IPv4External-Addrs

En esos campos se muestran las IPs y puertos donde se debe realizar la conexión. Claro que hay que darles la vuelta. Mirando el campo “From:” sabremos de que contacto es la IP.

Ir mirando los paquetes uno a uno buscando estos campos no parece muy divertido. Es mas cómodo hacer un filtro que busque en todo el paquete la cadena “srddA-lanretxE4vPI” o “stroPdnAsrddAlanretxE4vPI” (que es otra de las formas en las que aparece).

Este es el filtro que se queda con los paquetes que nos interesan:

frame[0:] contains 73:74:72:6f:50:64:6e:41:73:72:64:64:41:6c:61:6e:72:65:74:78:45:34:76:50:49:3a:20:36:34:37:33:3a:31:39:2e:35:30:31:2e:39:34:2e:35:38:0d:0a or frame[0:] contains 73:72:64:64:41:2d:6c:61:6e:72:65:74:78:45:34:76:50:49

image


Con mi programa “GetMSNIPs”

Usando Wireshark con el filtro se pueden obtener las IPs de una manera bastante cómoda. Pero me apetecía hacerlo un poco mas sencillo y ya de paso programar algo usando WinPcap.

El resultado es este programa que ahora expongo, le he llamado GetMSNIPs, me encantan los nombres originales. No pongo el código aquí que son 300 líneas.

GetMSNIPs: Source y binario.

Una captura de cómo funciona:

image

Modo de uso:

  1. Si no tiene instalado WinPcap, instálelo!.
  2. Arranque “GetMSNIPs” y seleccione la interfaz con la que se conecta a internet.
  3. Inicie Windows Live Messenger y cámbiese de avatar, utilice uno que no haya usado antes (así sus contactos no lo tendrán y se iniciará una conexión P2P para su envío).
  4. Espere un tiempo ó inicie conversaciones con sus contactos para forzar a que carguen su avatar y capturar así su IP.

 

Así que ya sabéis, si usáis Windows Live Messenger estas diciendo a tus contactos tu dirección IP. No es un gran problema, pero está bien saberlo.

Saludos!

45 comentarios:

  1. Muy buena idea. Me estaba planteando hacer algo parecido pero con el servicio de PunkBuster, el otro dia detecte una salida un poco excesiva de datos 9/10 Kbps constantes, sin estar haciendo nada... me temi lo peor y al mirar, encontre una cantidad bestial de procsesos PBS.exe (o asi no recuerdo las 3 letras...) lanzando datos como un loco, al investigar resulto k tenia abierto un juego en red y punkbuster estaba mandando comunicacion con todos los usuarios de mi lista de amigos (mantener sus estados, enviarles el mio, etc...) Asi que pense en hacer algo parecido a lo que tu propones con MSN, pero sobre punkbuster. En el Perfmon.exe del sistema pude apreciar k filtrando por el proceso de punkbuster, aparecia una extensisima lista de IPs asociadas, que punkbuster habia creado un hilo para cada uno de ellos, y que estos eran usuarios de la red vinculados a mi cuenta...
    Crees que podria aprovechar tu mismo planteamiento/proceso para al igual que con MSN uan vez localizada la conex, obtener IPs y valores de cada usuario con el que estoy conectado durante una partida?

    Muchas gracias de antemano.

    G.

    ResponderEliminar
  2. Si, es posible. Tendrías que mirar el protocolo que use Punkbuster para saber la IP de tus contactos y así poder asociar una IP a un contacto.

    Esta muy bien perfmon, a ver si me acostumbro a usarlo jeje.
    Gracias a ti.

    ResponderEliminar
  3. Máquina!! te metiste una buena panzada a currar ayer por lo que veo!

    Vendrá de lujo para la próxima con ganas de guarrerías jaja

    Saludos!

    ResponderEliminar
  4. Excelente trabajo,muchas gracias por el articulo.

    ResponderEliminar
  5. Buena entrada, gracias por el artículo y el código.

    Saludos

    ResponderEliminar
  6. Hola cuando lo ejecuto no me muestra ninguna interface

    ResponderEliminar
  7. Y si estoy usando Tor ? igual sale mi IP? Gracias

    ResponderEliminar
  8. @Juan es un programa por consola. Tienes que ejecutarlo desde cmd.exe

    @Anónimo Si configuras MSN para que use Tor saldrá la IP pública de un nodo Tor.

    Gracias @German, @LeGNa!

    ResponderEliminar
  9. Interesante, pero he probado hablando con dos contactos y con el filtro de Wireshark, y sólo me aparecen mis direcciones IP (ext./int.), pero las del contacto no. Además, sólo me ha salido con uno de los contactos, estando en conversación con 2.
    Con el programa al efecto, no he conseguido que saliese ningún dato, cambiando entre las tres opciones de conexión de red.
    Incluso mostrando una imagen a un contacto, no me ha salido nada.

    ResponderEliminar
  10. @Anónimo: Supongo que tenías activo Wireshark desde antes de conectar a Messenger. Sino puede que se haya intercambiado las IPs con ese contacto antes de que hayas activado Wireshark. Una vez que se han intercambiado no se vuelven a enviar a no ser que reinicies MSN Messenger. Por eso ves la de un contacto y no la del otro.

    Por otro lado los dos contactos de los que hablas tienen que usar MSN Messenger. He probado con otro cliente de Messenger, digsy, y no se intercambian las IPs.

    El programa funciona como el filtro de wireshark (a no ser que haya implementado algo mal), así que los resultados que obtienes con el filtro deberías obtenerlos con el programa.

    Puede que el hecho de que no encuentres ninguna IP con el programa se deba a que lo arrancaste después de haber iniciado la conversación con los 2 contactos y haberte cambiado el avatar. Por lo que ya se habían intercambiado las IPs.

    Por último no entiendo exactamente como funciona el protocolo P2P del MSN Messenger, así que podría suceder que en alguna ocasión no se intercambien las IPs porque uno de los clientes no puede iniciar ni recibir conexiones, y se envié el archivo/avatar/emoticono a través de servidores de Microsoft.

    Espero que con esto puedas hacerlo funcionar.
    Saludos!

    ResponderEliminar
  11. Hola Thor, comentas que requiere que sea la aplicacion MSNMessenger, que pasa si se utiliza la interfaz web? (Conectarse a travez de messenger integrado en la pagina)?

    ResponderEliminar
  12. Si un contacto tuyo utiliza la interfaz web no podrás saber su IP tampoco.

    ResponderEliminar
  13. He arrancado el GetMSNIP antes de iniciar sesión, he cerrado sesión antes de cambiar de interface de red, he iniciado GetMSNIP despues de iniciar sesión; he cambiado foto a nuevas, he hecho que mi contacto cambie foto.
    El GetMSNIP no ha cambiado el mensaje :(
    WinPcap 4.0.2, Windows Vista Home Premiun SP2, WLM 2009 14.0.nnnn, y mis contactos con el WLM ultima versión, supongo que es tontería probar en linux.
    (@Anonimo que no le funcionaba)

    ResponderEliminar
  14. Lo del interface de red es porque me salen 3, broadcom, microsoft y tunnel; había que probarlas todas

    ResponderEliminar
  15. hola estaba viendo el articulo de verdad que muy interesante,pero tengo una duda usando el “GetMSNIPs” y es que no me funciona cuando dice que elija la interfaz, me podrías explicar un poco eso.
    Gracias

    ResponderEliminar
  16. @Nicky69es que raro :S Yo solo lo he probado en mi equipo. Aun así no te fíes demasiado del programa, fíate mas de lo que diga WireShark. Es el primer programa que hago con winpcap no se si habré hecho algo mal.

    Sería perfecto si pudieses enviarme la captura del wireshark con el filtro msnms para intentar averiguar que es lo que sucede. Si quieres contacta conmigo via twitter o te dejo el correo.

    @Christian Dj en esa parte solo tienes que seleccionar la interfaz que usas para acceder a internet poniendo el número que aparece a la izquierda, 1, 2, 3. ¿Qué es lo que no funciona de esa parte?

    Un saludo!

    ResponderEliminar
  17. En mi placa de red inalámbrica, una Atheros AR5006X funcionando en Windows Server 2008 R2, da el siguiente error:

    "Unable to open the adapter. \Device\NPF_{blablabla} is not supported by WinPcap".

    No funcionaba porque iniciaba la captura en modo promiscuo, cosa que a los efectos de esta aplicación se puede ignorar. Al que le surja este error, tiene que seguir estos pasos.

    * Descomprimir el código fuente
    * Abrir el proyecto GetMSNIPs.sln en Visual Studio
    * En el archivo GetMSNIPs.cpp, línea 165, se declaran los parámetros con los que se inician la captura PCAP. Cambien el valor 1 por 0, y apreten F7. El nuevo ejecutable se va a generar en la carpeta Releases dentro de la carpeta del código fuente.

    Ejecuten la aplicación recién compilada y elijan otra vez la interfaz, a mi me funcionó correctamente.

    Me tomé el atrevimiento de traducir la aplicación y compilar la herramienta (Thor: he dejado constancia tu autoría en el ejecutable) con el código fuente modificado. Está en http://inner-core.org/GetMSNIPs.zip

    ResponderEliminar
  18. Muchas gracias manu^^, desconocía que pudiese dar problemas el modo promiscuo.

    Saludos!

    ResponderEliminar
  19. ¡Felicidades Thor! Esto no se hace en cinco minutos...

    Un abrazo, buenísimas entradas!

    ResponderEliminar
  20. Excelente sin duda eres un crack amigo, llevaba tiempo sin ver tus ideas que son de gran calidad se te extraña en tu foro

    (Simpl3x)

    ResponderEliminar
  21. En interface que pongo? :(

    ResponderEliminar
  22. Un número, 1, 2 ó 3 que corresponde a la interfaz de red que se usa para "salir a internet".

    Suerte!

    ResponderEliminar
  23. Ola no se si lo estoy haciendo mal, pero los pasos que hago son estos.

    1- Inicio el GetMSNIP y selecciono la interfaz

    2- Inicio sesion y cambio mi avatar y establesco la conversacio con una amigo pero nada que captura la ip

    ResponderEliminar
  24. @Gustavo haces todo bien, debería funcionarte. Desconozco por que no te funciona :(

    ResponderEliminar
  25. Pfff!, este chico es la leche, una pasada, uno de los pocos españoles que admiro (y no se ilusionen que el Chema no está en mi lista).

    Jamás imaginé que regresaría con tremenda furia y calidad de material, realmente te admiro THOR, y venga como esto de saber las IP's ha logrado 25 COMENTARIOS... Mmmm como que "amigos-amigos" NO TENEMOS EN EL MSN, espías confesadlo!!!.

    ResponderEliminar
  26. Sinceramente me pareces una maquina!!

    Nunca lo hubiera averiguado.

    Gracias!

    ResponderEliminar
  27. Gracias Digit0 y..."jose -anuncios eroticos" ¿? vaya nick jaja

    ResponderEliminar
  28. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  29. Eres un crack. Gracias por tu tiempo y el aporte. Vas a llegar lejos tio!

    ResponderEliminar
  30. Hola primero que nada muchas gracias por la info es muy útil, segundo los link de GetMSNIPs murieron después de lo que paso con megaupload me imagino.

    Se agradeceria mucho si fuera posible su re-subida pero si no es posible con los otros dos métodos quedamos muy bien :P

    saludos y muchas gracias

    ResponderEliminar
  31. No me funciona che! probe abriendo el msn antes y despues del getmsnips pero nada, solo me figura una conexion a intenet y no loguea nada, anda a saber. Y con wireshark tb probe y me guarda registros de todo lo q hace el messenger pero no me figuran las ips, solo registros con datos, probe usar el filtro que posteaste y me filtra todo, o sea, no figura nada. Tendra algo que ver la version instalada del messenger? Otra cosa, ahora en la version nueva del messenger se puede chatear con otras redes sociales, se podra utilizar el metodo para obtener las ips de facebook por ejemplo? Saludos!

    ResponderEliminar
  32. @Cristian: Arreglado en enlace, maldito multiupload, me ha fallado!
    http://www.informatica64.com/descargas/GetMSNIPs.zip

    @Anónimo: Lo acabo de probar con Windows Live Messenger 2011 Compilación 15.4.3538.513 y me ha funcionado. con otros clientes de Messenger dudo que funcione y con otras redes de mensajería no funcionará es algo del protocolo privado de MSN Messenger.

    Saludos!

    ResponderEliminar
  33. Gracias por contestarme! en el wireshark debajo de estas cadenas: “srddA-lanretxE4vPI” y “srddA-lanretnI4vPI” me sale IPv6-Addrs: y IPv6-Port: (y 2 direcciones de IPV6, una mia y la otra no la puedo decodificar). Tengo exactamente la misma version de messenger y nada.
    En el getmsnips solo me figura 1 sola "red", en el ejemplo q vos pusiste figuran 2 y una dice y otra , en mi caso figura una sola. Sera problema de la placa de red?

    Saludos!

    ResponderEliminar
  34. Yo de nuevo, me sale esto nada mas:

    listening on Intel 82579V Gigabit Network Connection...

    Solo Eso.

    ResponderEliminar
  35. @Lokillo lo que pasa es que no es compatible con IPv6, de momento solo soporta IPv4. Miraré si es muy complicado añadir IPv6.

    Por lo demás es normal que te salga solo una interfaz de red si solo tienes una en tu equipo.
    Un saludo!

    ResponderEliminar
  36. Lo que no comprendo bien es porque a vos te figura (va..te llega desde el servidor de microsoft) una ipv4 y a mi me llega una IPv6. Tendra que ver donde estara registrada la cuenta?

    Si te puedo ayudar en algo decime

    ResponderEliminar
  37. A mi no me funciona el GetMSNIPs ... me sale solo lo de listening on .... y después ni enviando emoticonos personalizados ni nada ... no sale nada en la consola .... Por cierto, con el Wireshark tampoco me sale, envio emoticono y no aparece por ningún lado la cadena "IPv4External-Addrs" ... tampoco ninguna linea de captura de msnms que ponga lo de "NFY PUT " solo sale "MSG" "QNG" "PNG" "ACK" ... probado en windows live messenger 2009 sobre windows xp ... Alguna ayuda por favor ?

    ResponderEliminar
  38. Hola, bueno he probado el programa, previamente he instalado la ultima version del winpcap de su pagina oficial, GetMSNIPs, selecciono mi unica interface de red y alli se queda, entro en el Messenger, cambio mis avatares por unos nuevos descargados de internet y no sale nada. Sera por qe tengo Windows 7 de 64 bits??
    Alguien lo ha probado en Win7 x64??
    Gracias por su ayuda.

    ResponderEliminar
    Respuestas
    1. A mi me pasa lo mismo, instalo el Winpcap y nada, se queda después de seleccionar la tarjeta .... incluso no funciona ni el Wireshark por lo que postee antes .... a ver si viene alguien que le haya funcionado y nos saca de dudas .... probado en windows live messenger 2009 sobre windows xp

      Eliminar
  39. Hola Thor, está muy bueno tu programa. Sería genial si le agregaras la función de leer los paquetes desde un archivo de captura pcap. Muchas gracias

    ResponderEliminar
  40. Alguien lo ha hecho funcionar por favor ? Que diga qué sistema operativo tiene y el messenger a ver si así lo podemos hacer funcionar :S

    ResponderEliminar
  41. Hola Thor!! me gustaría saber como cambio la ip de thor. Por que cuando activo thor con el botón, me genera una ip nueva, pero cuando desconecto y vuelvo a conectar sigue utilizando la misma ip, quería saber si hay una forma de cambiar la ip manualmente, o si el sistema la cambia automáticamente.

    ResponderEliminar
  42. no he podido descargar la GetMSNIPs la pag no carga hay otra fuente ??

    ResponderEliminar
  43. ¿si se usa vpn se podrá o no ver la otra ip?

    ResponderEliminar