winpcap-遇到麻烦发送数据
-
16-09-2019 - |
题
我正在使用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);
}
}
解决方案
一个关键特征的一个 TCP 是“丢弃重复数据包”
因此,要解决WinPCAP解决问题,您必须捕获一个MSN消息的所有数据包,并将其重新发送到新数据包中。希望MSN不会接受。
在这种情况下,学习如何处理MSN协议可以为此问题带来解决方案。
codeproject howto: Connect_TO_MSN_MESSENGER
也许这个c#lib msnp-sharp 以某种方式解决您的问题,或者至少使您更好地了解 Microsoft通知协议
其他提示
这是我的怀疑...
您正在重新发送数据包,我相信这将使网络驱动程序认为它已收到了两次相同的数据包。在各种情况下,这可能会发生,例如第一次发生的情况需要一段时间才能到达,因此发件人在丢失的情况下恢复。
然后,网络驱动程序(或MSN)将发现重复的内容并丢弃 - 毕竟,已经看到了该数据,因此它不需要冗余副本。因此,再次明确发送同一数据包基本上没有目的。
您还必须考虑到您在 溪流 数据的。不能保证该数据包包含 确切地 一个命令说“这是一个消息”。例如,它可能以下一条消息的第一位结尾。仅将额外数据插入流不仅很难,而且您还需要理解协议才能正确执行。
现在,当您说“我的MSN上什么都没出现”时,你是说不 额外的 消息,还是第一条消息没有出现?如果您只是没有重复,那么上述解释了。如果您有效 阻止 MSN通过运行此程序,然后显然有所不同。
我认为MSN具有某种应用程序级数据包编号,完整性检查和欺骗检查。对于这种备受瞩目的目标,其他任何事情都是无能的。
假设MSN将链式的流加密应用于其发送的数据包...在这种情况下,接收重复数据包仅会导致垃圾,因为加密算法的状态将有所不同(数据包的解密设置了解密状态,对于序列中的下一个数据包)。因此,重复的数据包看起来像是MSN的不良数据包,它将被忽略。
因此,重播数据包可能会起作用,但是MSN将确保在应用程序级别忽略它们。除非您了解MSN应用程序级协议,否则您将无法以任何简单的方式复制消息。
您不能重复一个TCP数据包,并期望套接字接收它,每个数据包上都有订单号。如果是UDP,它可能会起作用,但您也不能依靠数据包来表示整个消息UDP或TCP。
您的工作量太低,使用分层服务提供商在接口和套接字之间获得,就像通过TCP实现协议一样,您可以重复数据包,并且很可能在应用程序端没有检查。