Pregunta

Estoy usando el sharppcap de Tamir para intentar enviar datos a mi MSN.

Actualmente, con fines de prueba, mi idea es esperar cualquier mensaje recibido por mymsn@msn.com y luego enviar el paquete en sí, es decir, hacer que cualquier mensaje aparezca repetido para siempre en mi MSN. Pensé que esto tenía que funcionar, ya que simplemente estoy obteniendo el paquete en sí que recibo, y reinvándolo nuevamente.

Por alguna razón, nada aparece en mi MSN, aunque veré impreso en la consola muchos "datos atrapados, reiniciándolo". ¿Algunas ideas? Gracias

class Program {
    static PcapDevice device;

    static void Main(string[] args) {
        device = SharpPcap.GetAllDevices()[0];
        device.PcapOnPacketArrival +=
                new SharpPcap.PacketArrivalEvent(device_PcapOnPacketArrival2);
        device.PcapOpen(true, 1000);
        device.PcapStartCapture();

        Console.ReadKey();
    }

    static void device_PcapOnPacketArrival2(object sender, Packet packet) {
        TCPPacket tcpPacket = packet as TCPPacket;

        if (tcpPacket == null) {
            return;
        }

        string data = Encoding.Default.GetString(tcpPacket.Data);

        if (!data.StartsWith("MSG mymsn@msn.com")) {
            return;
        }

        Console.WriteLine("caught data, resending it");

        device.PcapSendPacket(tcpPacket);
    }
}
¿Fue útil?

Solución

Una característica clave de TCP es "descartar paquetes duplicados"

Por lo tanto, para resolver su problema con WinPCAP tendrá que capturar todos los paquetes de un mensaje MSN y reenviarlo en nuevos paquetes. Esperemos que MSN no acepte eso.

En ese caso, aprender a lidiar con el protocolo MSN podría traer una solución a este problema.

CodeProject Howto: Connect_to_msn_messenger

Tal vez esta C# lib Msnp-sharp de alguna manera resuelve su problema o al menos le brinda una mejor comprensión de Protocolo de notificación de Microsoft

Otros consejos

Aquí está mi sospecha ...

Estás reiniciando el paquete, que creo que hará que el controlador de red piense que recibió el mismo paquete dos veces. Eso puede suceder en varios casos, como la primera ocurrencia que tarda un tiempo en llegar, por lo que el remitente se reenvía en caso de que se haya perdido.

El controlador de red (o MSN) luego detectará el duplicado y lo descartará; después de todo, ya se ve esos datos, por lo que no necesita la copia redundante. Entonces, enviar explícitamente el mismo paquete nuevamente básicamente no tiene ningún propósito.

También tienes que considerar que estás viendo un paquete en un corriente de datos. No hay garantía de que ese paquete contenga exactamente Un solo comando que dice "Aquí hay un solo mensaje". Puede terminar con el primer bit del siguiente mensaje, por ejemplo. Simplemente insertar datos adicionales en la transmisión no solo sería difícil, sino que también necesitaría comprender el protocolo para hacerlo correctamente.


Ahora, cuando dices "nada aparece en mi msn", ¿quieres decir no? extra ¿Mensajes, o que el primer mensaje no aparece? Si es que simplemente no estás recibiendo repetición, entonces lo anterior lo explica. Si eres efectivamente bloqueo MSN ejecutando este programa, entonces eso es claramente algo diferente.

Supongo que MSN tiene algún tipo de numeración de paquetes a nivel de aplicación, verificación de integridad y verificación de parodia. Cualquier otra cosa sería criminalmente incompetente para este tipo de objetivo de alto perfil.

Suponga que MSN aplica el cifrado de flujo encadenado a los paquetes que envía ... en ese caso, recibir un paquete duplicado solo dará como resultado basura, ya que el estado del algoritmo de cifrado será diferente (el descifrado de un paquete establece el estado de descifrado del estado de descifrado para el siguiente paquete en la secuencia). Por lo tanto, el paquete duplicado se verá como un mal paquete para MSN, y será ignorado.

Por lo tanto, la reproducción de paquetes probablemente funcionará, pero MSN se asegurará de ignorarlos en el nivel de aplicación. A menos que comprenda el protocolo de nivel de aplicación MSN, no podrá duplicar los mensajes de ninguna manera simple.

No puede repetir un paquete TCP y esperar que Socket lo reciba, hay números de pedido en cada paquete. Si fuera UDP, tal vez funcionaría, pero tampoco puede confiar en los paquetes para representar un mensaje completo, ya sea UDP o TCP.

Está trabajando en proveedores de servicios en capas de nivel demasiado bajo para obtener entre la interfaz y el socket, es como implementar un protocolo a través de TCP, allí puede repetir paquetes y lo más probable es que no haya verificación en el lado de la aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top