2010-12-02 5 views
2

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

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

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

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

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

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

ответ

0

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

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

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

ваш server-> router-> другой компьютер

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

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

+0

Этот «прокси» будет работать в локальной сети, при этом не задействован маршрутизатор. Исходные пакеты поступают из Интернета и один раз в локальной сети, прокси-программа отправит один и тот же пакет (поддерживающий публичный IP-адрес источника) на два или более IP-порта. – Opera362 2010-12-03 07:21:14

+0

Я редактировал свой оригинальный вопрос с замечанием LAN. Спасибо :-) – Opera362 2010-12-03 07:25:50

+0

вам нужно будет убедиться, что этот трафик не проходит через маршрутизатор, а отправляется по локальной сети непосредственно с вашего компьютера. Я не уверен, что это поведение 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, вы часто будете блокироваться с помощью анти-спуфинговых маршрутизаторов между ними. Я столкнулся с этим с AWS, например.

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

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