将UDP数据包转发到保持原始源地址的多个IP

时间:2010-12-02 22:39:17

标签: c# proxy udp winpcap pcap.net

我有一个工作系统,通过发送到固定IP的UDP数据包接收数据:端口,我想使用程序(某种代理?)将这些数据包的副本发送到新的IP:端口(或IP列表:端口,但都在与程序相同的局域网内。)

不像看起来那么容易,因为我需要复制的数据包与原始数据包具有相同的源IP地址。

在我的研究中,我发现PCap.Net(WinPCap .NET包装器)很有用,因为它可以从头开始构建一个包,它支持修改所有的地址字段。我已设法捕获数据包并构建它们。但有些他们没有到达目的地(!?)。我应该使用不同的PacketCommunicator来接收和发送它们吗?

无论如何,这个问题与PCap.Net并不完全相关,而是了解实现我预期目标的其他方法。通过免费申请?商业应用?开源样本?还有其他库吗?

我的系统是基于Windows的(这里没有Linux)。我有C#(.NET)经验(如果没有.NET绑定,我不能使用C ++库。)

非常感谢你的帮助

5 个答案:

答案 0 :(得分:2)

我知道这是一个老问题,但这就是答案:

http://code.google.com/p/samplicator/

侦听UDP并将其转发到一个或多个其他IP地址,可选择欺骗(原始)源IP地址。

用于转发netflow / sflow / syslog等数据包。

答案 1 :(得分:0)

你应该首先考虑网络。如果流量需要通过路由器,则可能无法实现。 原始数据包通过:

source-> router->您的服务器

如果您尝试将其发回原样:

您的服务器 - >路由器 - >另一台计算机

然后路由器可能甚至不接受此流量,因为根据路由器配置,它不能来自您的计算机。想一想 - 如果允许的话,我可以像任何人一样发送流量。

然而,在局域网中这是非常可行的(除非你的交换机上有某种MAC欺骗保护)

答案 2 :(得分:0)

您要做的是“UDP Forwarding”。您收到一个UDP数据包,然后将其转发给另一个主机

Here is an application that does that (seems to be free)

答案 3 :(得分:0)

除了保留源IP地址和更改目标IP地址外 你必须交换源和目标mac地址。

如果您将原始数据包发送到路由器/交换机/调制解调器,但mac地址不是它的地址。 它将被删除。

基本上,你必须修改你处理的每个网络层,并批准处理寻址。 抱歉我的拼写

答案 4 :(得分:0)

如果您尝试欺骗目标地址来执行netflow中继等操作,您通常会被中间的反欺骗路由器阻止。例如,我在AWS中遇到过这种情况。

解决方案是获取RAW udp数据包,然后将其发送到另一个udp数据包中的新目标。当它到达目的地时,你必须“打开”数据包,然后在环回接口上发送给它自己(基本上是“解包”)。

您可以使用带有套接字模块的python代码执行此操作。