Winpcap - 发送数据有麻烦

dev*_*ium 0 .net c# packet-capture winpcap packet-sniffers

我正在使用Tamir的SharpPCap尝试将数据发送到我的msn.

目前,出于测试目的,我的想法是等待mymsn@msn.com收到的任何消息,然后再次发送数据包,也就是说,在我的msn上永远重复显示任何消息.我认为这必须工作,因为我只是收到我收到的数据包,然后重新发送它.

出于某种原因,我的msn上没有任何内容,虽然我会在控制台中看到很多"抓住数据,重新发送".有任何想法吗?谢谢

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Bdi*_*iem 6

TCP的一个关键特性是"丢弃重复的数据包"

因此,要使用WinPcap解决您的问题,您必须捕获一个MSN消息的所有数据包并将其重新发送到新数据包中.希望MSN不会接受.

在这种情况下,学习如何处理MSN协议可以解决这个问题.

CodeProject Howto:Connect_To_MSN_Messenger

也许这个C#lib MSNP-Sharp以某种方式解决了您的问题,或者至少让您更好地理解Microsoft通知协议