2010-12-02 89 views
2

我有一个工作系统,通过UDP数据包接收数据发送到一个固定的IP:端口,我想用一个程序(某种代理?)发送副本将这些数据包添加到新的IP:端口(或IP:端口列表中,但全部位于程序所在的同一LAN内)。转发UDP数据包到几个IP维护原始源地址

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

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

无论如何,这个问题与PCap.Net没有完全相关,而是知道实现我想要的目标的替代方法。通过免费的应用程序?商业应用?开源示例?任何其他图书馆使用?

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

的帮助

回答

0

非常感谢你首先应该想想网络。如果流量需要通过路由器,则可能不可能。 原始数据包都挺过来了:

源 - >路由器 - >您的服务器

,如果你试图把它送回了像这样:

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

然后路由器甚至可能不接受这个流量,因为它不能从你的计算机发起,根据路由器的配置。考虑一下 - 如果允许的话,我可以像任何人一样发送流量。

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

+0

此“代理”将在LAN上运行,不涉及路由器。源数据包来自互联网,一旦在局域网中,代理程序将发送相同的数据包(保持公共IP源地址)到两个或更多IP:端口。 – Opera362 2010-12-03 07:21:14

+0

我编辑了我的原始问题与LAN的评论。感谢:-) – Opera362 2010-12-03 07:25:50

+0

你将不得不确保这个流量不通过路由器,而是直接从你的计算机发送到LAN上。我不确定这是LAN上UDP的默认行为。这是可以强制使用原始套接字和/或pcap。 – Artemiy 2010-12-03 16:03:11

0

除了保持源IP地址和改变目的地IP地址 你必须交换源和目的MAC地址。

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

基本上,你必须修改你处理的每个网络层,并且正确处理寻址。 对不起,我的拼写

2

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

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

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

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

0

如果您试图欺骗目标地址来执行netflow中继等操作,您经常会被防欺骗路由器阻止。例如,我遇到了这个问题。

解决方法是取RAW udp数据包,然后将它发送到另一个udp数据包内的新目标。当它到达目的地时,你必须“打开”数据包,然后通过回送接口发送给自己(本质上是“解包”)。

你可以用python代码和socket模块来做到这一点。