Question

J'utilise le SharpPCap de Tamir pour essayer d'envoyer des données à mon msn.

À l'heure actuelle, à des fins de test, mon idée est d'attendre que tout msg reçu par mymsn@msn.com, puis envoyer le paquet lui-même à nouveau, qui est, faire tout message apparaît toujours sur mon répète msn. Je pensais que cela devait travailler, comme je suis simplement reçois le paquet lui-même que je reçois, et renvoyer à nouveau.

Pour une raison rien apparaît sur mon msn, bien que je verrai imprimé dans la console beaucoup de « données capturées, il réémission ». Des idées? Merci

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);
    }
}
Était-ce utile?

La solution

L'une des principales caractéristiques de href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol" TCP est "éliminer des paquets en double"

Donc, pour résoudre votre problème avec WinPcap vous devrez capturer des paquets d'un message MSN et renverrons dans de nouveaux paquets. Espérons que MSN n'acceptera pas que.

Dans ce cas, apprendre à traiter avec le protocole MSN pourrait apporter une solution à ce problème.

CodeProject Howto: Connect_To_MSN_Messenger

Peut-être C # lib MSNP-Sharp résout en quelque sorte votre problème ou au moins donne vous une meilleure compréhension des Protocole Microsoft notification

Autres conseils

Voici mon soupçon ...

Vous réémission le paquet, que je crois fera le pilote réseau pense qu'il est reçu le même paquet deux fois. Cela peut se produire dans divers cas, comme la première occurrence de prendre un certain temps pour arriver, si l'expéditeur réémission dans le cas où il a obtenu perdu.

Le pilote réseau (ou MSN) repérera alors le double et le jeter - après tout, il a déjà vu que les données, donc il n'a pas besoin de la copie redondante. Donc, envoyer explicitement le même paquet à nouveau a pratiquement rien.

Vous avez également à considérer que vous voyez un paquet dans un flux de données. Il n'y a aucune garantie que ce paquet contient exactement une seule commande disant: « voici un seul message ». Il peut se terminer par le premier bit du message suivant, par exemple. Il suffit d'insérer des données supplémentaires dans le flux serait non seulement difficile, mais vous auriez besoin aussi de comprendre le protocole afin de le faire correctement.


Maintenant, quand vous dites « rien n'apparaît sur mon MSN » ne signifie pas que vous supplémentaire messages, ou que le premier message ne semble pas? Si c'est que vous n'êtes tout simplement pas se répéter, le explique-dessus. Si vous êtes effectivement bloquer MSN en exécutant ce programme, alors c'est clairement un peu différent.

Je suppose que MSN a une sorte de numérotation des paquets au niveau de l'application, le contrôle d'intégrité et spoof vérification. Tout le reste serait pénalement incompétents pour ce genre de cible de grande envergure.

On suppose que MSN applique un chiffrement de flux chaîné aux paquets envoyés ... dans ce cas, la réception d'un paquet double sera juste le résultat à la poubelle, comme l'état de l'algorithme de chiffrement sera différent (le déchiffrement d'un paquet met en place l'état de déchiffrement pour le paquet suivant dans la séquence). Ainsi, le paquet dupliqué ressemble à un mauvais paquet à MSN, et il sera ignoré.

paquets rejouant fonctionneront probablement, mais MSN assurez-vous de les ignorer au niveau de l'application. À moins que vous comprenez le protocole de niveau d'application MSN, vous ne serez pas en mesure de reproduire des messages de façon simple.

Vous ne pouvez pas répéter un paquet tcp et attendre prise pour le recevoir, il y a des numéros de commande sur chaque paquet. Si c'était UDP il serait peut fonctionner, mais vous pouvez aussi ne pas compter sur les paquets pour représenter message entier soit tcp ou udp.

Vous travaillez sur le niveau trop bas, utilisez les fournisseurs de services en couches pour obtenir entre l'interface et la prise, il est comme la mise en œuvre d'un protocole sur TCP, là, vous pouvez répéter les paquets, et très probablement il n'y aura pas de contrôle sur le côté de l'application .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top