【发布时间】: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