У меня две машины 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 и изменить пакеты. Мой подход заключается в следующем:
- После трехстороннего установления связи B посетите веб-сайт в браузере, и сервер вернет HTTP/1.1 200 OK, найдите тег заголовка в HTML.
- Используйте функцию skb_tailroom() для получения размера зала.
- Если длина вставки содержимого меньше, чем задняя часть, вызовите функцию skb_put(), расширяющую skb.
- Вставьте содержимое после тега заголовка и измените длину Content-Length.
- пересчитанные контрольные суммы IP и TCP.
Проблемы: Машина B получила модифицированные пакеты от машины A и отбросила ее, а машина A повторно передала модифицированные пакеты.
Я подозреваю, что проблема вызвана вычислением контрольной суммы.
P.S. Я использовал тот же алгоритм для вычисления контрольной суммы для изменения пакетов непосредственно на машине А, она работает. Модифицированные пакеты с машины B на машине A, она не работает.
Извините за мой английский.
Спасибо за ваш ответ. Да, если длина пакетов изменилась, необходимо пересчитать количество и номер. Но длина пакетов не меняется, поэтому я не пересчитываю номер seq и ack. Есть ли другие возможные причины? – Aland
Общая длина пакета не меняется? (Я думал, вы упомянули о вводе большего количества данных в skb). Если длина пакета не изменяется, то я не знаю, возможно, используя wirehark для захвата пакетов и проверки контрольной суммы через нее, может вам помочь. – Nithin
После вызова функции skb_put() расширяет skb, я получил пойманные пакеты с wirehark, и я не нашел контрольную сумму неправильно. Во всяком случае, все еще очень благодарен вам. – Aland