Переадресация пакетов UDP на несколько IP-адресов с сохранением исходного адреса источника - PullRequest
2 голосов
/ 03 декабря 2010

У меня есть работающая система, которая получает данные через UDP-пакеты, отправленные на фиксированный IP: порт, и я хочу использовать программу (какой-то прокси-сервер?) Для отправки копии этих пакетов на новый IP: порт (или список IP: Порты, но все в той же локальной сети, что и программа).

Не так просто, как кажется, потому что мне нужно, чтобы скопированные пакеты имели тот же IP-адрес источника, что и исходные.

В своем исследовании я обнаружил, что PCap.Net (оболочка WinPCap .NET) может быть полезен, поскольку он может создать пакет с нуля и поддерживает изменение всех полей адреса. Мне удалось захватить пакеты и собрать их. Но в некоторой степени они не достигают желаемого пункта назначения (!?). Должен ли я использовать другой PacketCommunicator для их получения и отправки?

В любом случае, вопрос не полностью связан с PCap.Net, но должен знать альтернативные способы достижения моей желаемой цели. Через бесплатное приложение? коммерческое применение? Образец с открытым исходным кодом? Любая другая библиотека для использования?

Мои системы основаны на Windows (здесь нет Linux). И у меня есть опыт работы с C # (.NET) (я не могу использовать библиотеку C ++, если нет привязок NET).

Большое спасибо за вашу помощь

Ответы [ 5 ]

2 голосов
/ 30 октября 2012

Я знаю, что это старый вопрос, но это ответ:

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

Прослушивает UDP и перенаправляет его на один или несколько других IP-адресов, при желании подменяя (исходный) IP-адрес источника.

Используется для пересылки пакетов netflow / sflow / syslog и т. Д.

0 голосов
/ 30 июня 2016

Если вы попытаетесь подделать адрес назначения для выполнения таких операций, как ретрансляция сетевого потока, вы часто будете заблокированы промежуточными антиспуфинговыми маршрутизаторами. Я столкнулся с этим, например, с AWS.

Решение состоит в том, чтобы взять пакет RAW udp, а затем просто отправить его вместе с новым пунктом назначения в другом пакете udp. Когда он достигает места назначения, вы должны «развернуть» пакет и затем отправить его себе через интерфейс обратной связи (по сути, «развернуть»).

Вы можете сделать это с помощью кода Python с помощью модуля сокетов.

0 голосов
/ 03 декабря 2010

То, что вы пытаетесь сделать, называется «UDP Forwarding». Вы получаете пакет UDP, а затем пересылаете его на другой хост

Вот приложение, которое делает это (кажется, бесплатно)

0 голосов
/ 30 июля 2011

Помимо сохранения IP-адреса источника и изменения IP-адреса назначения, вы ДОЛЖНЫ поменять местами MAC-адреса источника и назначения.

, если вы отправляете необработанный пакет на маршрутизатор / коммутатор / модем, ноMAC-адрес не является адресом к нему.оно будет отброшено.

По сути, вам необходимо пересмотреть каждый сетевой уровень, с которым вы имеете дело, и соответствующим образом обработать адресацию.Извините за орфографию

0 голосов
/ 03 декабря 2010

сначала подумайте о сети. это может быть невозможно, если трафик должен проходить через маршрутизатор. исходный пакет прошел:

source-> router-> ваш сервер

если вы пытаетесь отправить его обратно так:

ваш сервер-> маршрутизатор-> другой компьютер

тогда маршрутизатор может даже не принимать этот трафик, так как он не может исходить от вашего компьютера, согласно конфигурации маршрутизаторов. просто подумай - я мог бы отправлять трафик как угодно, если бы это было разрешено.

однако в локальной сети это очень выполнимо (если только у вас на коммутаторах не установлена ​​какая-либо защита от спуфинга MAC)

...