2010-12-02 91 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模塊來做到這一點。