【问题标题】:Windows UDP Forwarding to multiple ports (.NET)Windows UDP 转发到多个端口 (.NET)
【发布时间】:2020-09-22 03:05:44
【问题描述】:

我有一个非常简单的问题要理解,但对我来说很难解决。

我有 2 个应用程序使用相同的 UDP 数据包。我在 25000 端口和两个应用程序上接收数据包(第一个在原始 25000 端口上侦听,第二个在端口 27000 上侦听)。

我需要做的是复制接收到的 UDP 数据包并将其发送到端口 27000,但使用相同的原始 IP 地址和端口。这让我们只需要修改 upd 数据包上的目标端口。

我发现了很多Multi-Port Forwarding程序,它们确实转发了UDP数据包,但没有保留原来的。所以当我说,转发 25000 -> 27000 时,只有我的第二个应用程序正在接收。

我尝试使用 SharpPcap 包并自己创建一个简单的多端口转发。

private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            var packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
            if (packet is EthernetPacket)
            {
                var device = (ICaptureDevice)sender;                                
                var eth = ((EthernetPacket)packet);                
                var ip = packet.Extract<IPPacket>();
                if (ip != null)
                {
                    var udp = packet.Extract<UdpPacket>();
                    if (udp != null)
                    {
                        udp.DestinationPort = 27000;
                    }                    
                }
                device.SendPacket(eth);
            }
        }

如果我运行此代码,在 Wireshark 中我可以看到数据包在另一个端口上再次发送,但我的第二个应用程序没有收到它,只有端口 25000 上的第一个在工作。

是否有可能以某种方式解决这个问题?

【问题讨论】:

    标签: c# .net udp pcap portforwarding


    【解决方案1】:

    更改端口号后需要重新计算校验和

    ip.UpdateIpChecksum();
    udp.UpdateUdpChecksum();
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多