2015-06-16 1 views
0

У меня две машины A и B, B не имеют доступа к Интернету напрямую. B должен получить доступ к сети через А.netfilter forward hook point для изменения пакетов

Есть два NIC eth0 и eht1 на А.

eth0'IP является 10.0.2.15, IP eth1 является 192.168.56.101, B'gateway является A'eth1 NIC IP.

После настройки политики iptables на машине A, B может получить доступ к Интернету.

Теперь я надеюсь перехватить пакеты с машины B на машине A и изменить пакеты. Мой подход заключается в следующем:

  1. После трехстороннего установления связи B посетите веб-сайт в браузере, и сервер вернет HTTP/1.1 200 OK, найдите тег заголовка в HTML.
  2. Используйте функцию skb_tailroom() для получения размера зала.
  3. Если длина вставки содержимого меньше, чем задняя часть, вызовите функцию skb_put(), расширяющую skb.
  4. Вставьте содержимое после тега заголовка и измените длину Content-Length.
  5. пересчитанные контрольные суммы IP и TCP.

Проблемы: Машина B получила модифицированные пакеты от машины A и отбросила ее, а машина A повторно передала модифицированные пакеты.

Я подозреваю, что проблема вызвана вычислением контрольной суммы.

P.S. Я использовал тот же алгоритм для вычисления контрольной суммы для изменения пакетов непосредственно на машине А, она работает. Модифицированные пакеты с машины B на машине A, она не работает.

Извините за мой английский.

ответ

0

Поскольку это номера TCP, Seq # и Ack # имеют значение, и если вы редактируете пакетные данные без редактирования Seq # & Ack #, это не сработает.

+0

Спасибо за ваш ответ. Да, если длина пакетов изменилась, необходимо пересчитать количество и номер. Но длина пакетов не меняется, поэтому я не пересчитываю номер seq и ack. Есть ли другие возможные причины? – Aland

+0

Общая длина пакета не меняется? (Я думал, вы упомянули о вводе большего количества данных в skb). Если длина пакета не изменяется, то я не знаю, возможно, используя wirehark для захвата пакетов и проверки контрольной суммы через нее, может вам помочь. – Nithin

+0

После вызова функции skb_put() расширяет skb, я получил пойманные пакеты с wirehark, и я не нашел контрольную сумму неправильно. Во всяком случае, все еще очень благодарен вам. – Aland

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