2009-04-27 10 views
-1

Мы изучаем способы создания сервера сетевых эффектов. Под этим я подразумеваю центральный сервер, который будет проверять все пакеты в сети и применять логику (drop, delay, alter и т. Д.) На основе факторов, внешних по отношению к реальной сети, таких как погода и прямая видимость.Можете ли вы использовать ARP-Отравление (спуфинг) для применения имитируемых внешних эффектов?

Это все, что связано с запуском симуляции нескольких объектов реального мира: физический узел в сети будет представлять собой 3D-движущийся объект в 3D-виртуальном мире. Как я уже упоминал, эффекты будут вычисляться по прямой видимости, расстоянию, помехам и т. Д. Между «виртуальным положением» узлов.

Мне известны другие инструменты, которые позволяют делать такие эффекты (например, OPNET, которые мы можем использовать как часть решения), но они обычно требуют, чтобы вы направили данные непосредственно к ним для обработки. Они также не обрабатывают UDP или TCP.

Мне нужен способ прозрачного запуска нашего сервера и применения эффектов без изменения какого-либо существующего программного обеспечения (а некоторые не могут быть изменены в любом случае) для UDP и TCP.

В связи с этим мы думали использовать ARP-отравление (или спуфинг, в зависимости от того, что вы предпочитаете его называть), чтобы заставить весь трафик через один (или потенциально несколько для балансировки нагрузки) этих серверов выполнять формирование пакета.

Возможно ли это? (Не хотите тратить недели разработки, прежде чем понял, что существует слишком много препятствий, или что это утончается невозможно)

Если это возможно, является RFC826 (плюс 5227 и 5494) последний документ на ARP? Есть ли лучший документ?

Будет ли это работать, если некоторые из узлов сети являются виртуальными машинами (они могут быть мостом или NAT'ed)?

Есть ли библиотеки, которые позволяют делать это на C#?

(Мы открыты для языка, который мы используем, но, вероятно, предпочитают C# или решения Qt на основе)

ответ

4

Технически вы можете использовать отравление ARP, чтобы сделать это, однако я действительно не думаю, что рекомендую его. Я действительно не понимаю, почему вы пытаетесь это сделать, но из-за его звуков вы пытаетесь подобрать типы потери/повреждения пакетов, которые могут быть вызваны радиочастотным оборудованием.

Во-первых, вы упомянули C#, который на самом деле не является языком для этого, низкоуровневая сеть слишком удалена. Я думаю, что C# действительно обеспечивает класс сокетов, но если вы пытаетесь эмулировать TCP/IP и UDP, а пароли spoof не принадлежат вашему хосту, это фактически означает, что вы - пакеты. Возможно, есть способ остановить это, но вам придется исследовать .Net Raw Socket.

Вы можете использовать WinPcap с оберткой C#. Но он по-прежнему не является нативной версией и может понести штрафы за производительность. Существует оболочка C# для WinPcap, которую я использовал под названием SharpPcap, однако некоторые части не очень хорошо реализованы, и мне пришлось изменить ее для того, что мне было нужно. Я проделал несколько простых тестов по захвату трафика на скорости 300 Мбит/с, но это не включает анализ протокола или добавление пакетов обратно в сеть. Это также можно использовать для возврата пакетов в сеть, но в прошлом это было очень низкой производительностью. Общепринятое восприятие моих сетевых сверстников заключается в том, что этот тип проверки не может быть выполнен без аппаратной поддержки со скоростью Gbps.

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

* Обратите внимание на примечание Боба Маккормика о том, что оно будет влиять только на хосты в разных подсетях, однако есть простой чит, на каждом хосте (если назначены статические IP-адреса) помещается маска подсети в/32 (т.е. 255.255. 255,255). Это по существу заставит хост отправлять все его фреймы, которые будут маршрутизироваться маршрутизатором, поскольку он больше не знает о каких-либо других пользователях в той же сети, что и сам.

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

Однако, если вы выполняете этот уровень работы, я бы предложил, чтобы вы снова использовали Linux для хоста, который вы отправляете, и ваш трафик тоже, и, возможно, инструмент Боб Маккормик рекомендовал. Однако в Linux я уверен, что существует множество инструментов, которые можно настроить для имитации подобных видов событий, которые вы ищете.

1

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

Возможно ли это?

Редактировать: Поскольку вы управляете сетью, я не думаю, что вам нужно ARP Poisoning вообще. Я не уверен, как выглядит ваша топография, но для небольшой/средней настройки я бы переключился с CISCO или аналогичного устройства и исследовал запуск Linux-порта в качестве маршрутизатора. Затем любые скрипты и такие, какие необходимо для сброса/задержки/изменения пакетов по мере необходимости. Решение Linux-вместо-Cisco может быть немного трогательно, я не эксперт, но для небольшой лаборатории это не должно быть проблемой.

Я лично использую shorewall (интерфейс для iptables), чтобы сегментировать мою сеть и передавать/отклонять/разрешать пакеты между сегментами. Привлечение его к использованию скриптов, контролируемых внешними факторами, было бы большим количеством работы iptables для динамического добавления и удаления правил, но, безусловно, выполнимых.

Отказ от ответственности: Я никогда не работал с устройствами Cisco, поэтому я не знаю, какие усовершенствованные функции они способны. Возможно, они способны использовать передовую логику, если это так, тем лучше, я просто предполагал, что это не так.

+0

Мы управляем маршрутизатором (и всей сетью - это в нашей собственной лаборатории), так что это должно быть возможно. –

1

Spoofing никогда не будет надежным. Это в основном гонка между вами и законным владельцем IP-адреса, который вы подделываете.

Обратите внимание, что любые конфигурации, связанные с использованием маршрутизатора, например, предложение использовать маршрутизатор linux и т. Д., Будут только позволяют влиять на трафик между хостами, находящимися в разных подсетях.

Если это работает для вас, могу ли я предложить начать с функциональности Netem (http://www.linuxfoundation.org/en/Net:Netem) в ядре Linux? Netem позволит вам контролировать пропускную способность, задержку, джиттер, переупорядочивание пакетов и т. Д. Для любых пакетов, отправленных ядром Linux. Я использовал его несколько раз, чтобы имитировать характеристики WAN между маршрутизаторами Cisco для тестирования конфигураций QOS.