2015-12-21 5 views
0

Я хотел бы подражать приходу трафика на конкретном интерфейсе (например, eth0). У меня есть достаточно жесткие требования (и, вполне возможно, что это не возможно):Эмуляция прибытия трафика по определенному интерфейсу

  1. Мне нужно эмулировать прибытие на конкретном интерфейса . Например. на eth0. Отправка пакетов на другом интерфейсе (например, tap0) не позволяет решить мою проблему.
  2. Решение должно быть самодостаточным, то есть не включать другую машину, не требуя подключения кабелей между интерфейсами или любых других «внешних» решений.

Чтобы обеспечить некоторый контекст, мне нужно пакеты, которые я направляю для обхода IP-сети (specificlly Я заинтересован в NETFILTER крючках) точно так, как если вы прибываете на определенном интерфейсе. Например, если правило существует в iptables в цепочке FORWARD в таблице фильтров, правило приема которого равно '-i eth0', , тогда правило должно соответствовать любому пакету, отправленному запрошенным механизмом.

ответ

1

Вам необходимо создать модуль ядра, чтобы вручную вставлять пакеты (пакеты) в сетевой стек. Основные шаги вам нужны:

  1. Создать SKB
  2. Настройка заголовков и данных
  3. НАЙДИТЕ struct net_device устройства вы хотите подменить (см here)
  4. Установите skb->dev в net_device находится в шаге 3
  5. Зов netif_rx_ni(skb) толкать пакет вверх по стеку

Существует код, который используется в подавляющем большинстве, на http://cdn.kerio.com/dwn/control/control-9.0.0-442/kerio-control-kipf-9.0.0-442-linux.tgz в drivers/ipf/linux/pkt.c на линии 691 (функция pkt_tx_rx_eth). Вы также можете увидеть, как работает драйвер TUN для ядра. here.

Надеюсь, это поможет! удачи.

Смежные вопросы