C# Windows UDP转发到多个端口(.NET)

C# Windows UDP转发到多个端口(.NET),c#,.net,udp,pcap,portforwarding,C#,.net,Udp,Pcap,Portforwarding,我有一个非常简单的问题需要理解,但对我来说很难解决 我有两个应用程序使用相同的UDP数据包。我在25000端口和两个应用程序上接收数据包(第一个在原来的25000端口上侦听,第二个在27000端口上侦听) 这里我需要做的是复制接收到的UDP数据包,并将其发送到27000端口,但使用相同的原始IP地址和端口。这使我们只需修改upd数据包上的目标端口 我发现了很多多端口转发程序,它们确实转发了UDP数据包,但没有保留原来的数据包。所以当我说,forward25000->27000时,只有我的第二个应

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

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

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

我发现了很多多端口转发程序,它们确实转发了UDP数据包,但没有保留原来的数据包。所以当我说,forward25000->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);
            }
        }
私有静态无效设备\u OnPacketArrival(对象发送方、CaptureEventArgs e)
{
var packet=packet.ParsePacket(e.packet.LinkLayerType,e.packet.Data);
如果(数据包是EthernetPacket)
{
var设备=(ICaptureDevice)发送方;
var eth=((EthernetPacket)数据包);
var ip=packet.Extract();
如果(ip!=null)
{
var udp=packet.Extract();
如果(udp!=null)
{
udp.DestinationPort=27000;
}                    
}
设备发送包(eth);
}
}
如果我运行这段代码,在Wireshark中,我可以看到数据包在另一个端口上再次发送,但我的第二个应用程序没有收到它,只有端口25000上的第一个应用程序在工作


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

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

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

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

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