2010-04-19 3 views
3

У меня есть приложение для Linux, которое говорит TCP, а также помогает в анализе и статистике, я хотел бы изменить данные в некоторых из пакетов TCP, которые он отправляет. Я бы предпочел сделать это без взлома стека Linux TCP.Могу ли я сделать «модификатор TCP-пакета» с помощью tun/tap и raw сокетов?

Идея, которую я имею до сих пор, заключается в создании моста, который действует как «модификатор TCP-пакета». Моя идея - подключиться к приложению с помощью устройства tun/tap на одной стороне моста и к сетевой карте через сырые сокеты на другой стороне моста.

Я забочусь о том, что когда вы открываете сырой сокет, он по-прежнему отправляет пакеты до стека TCP в Linux, поэтому я не мог их модифицировать и отправлять, даже если бы захотел. Это верно?

псевдо-C-код эскиз моста выглядит следующим образом:

tap_fd = open_tap_device("/dev/net/tun"); 
raw_fd = open_raw_socket(); 
for (;;) { 
    select(fds = [tap_fd, raw_fd]); 
    if (FD_ISSET(tap_fd, &fds)) { 
     read_packet(tap_fd); 
     modify_packet_if_needed(); 
     write_packet(raw_fd); 
    } 
    if (FD_ISSET(raw_fd, &fds)) { 
     read_packet(raw_fd); 
     modify_packet_if_needed(); 
     write_packet(tap_fd); 
    } 
} 

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

+1

Я бы сказал, что вы переоцениваете это. 'tcpdump' должно быть достаточно для анализа пакетов и статистики. –

ответ

1

Были несколько приложений, которые я использовал несколько лет назад, чтобы выполнить некоторую обработку пакетов TCP/IP для тестирования брандмауэра: fragoute and fragtest. Похоже, что они не были затронуты годами, но они могут дать вам некоторые идеи о том, что делать в вашем коде.

1

Возможно, вы захотите использовать библиотеку LD_PRELOAD для подключения функций, которые он использует для отправки данных (send(), write() и т. Д.).

Это не связано с каким-либо явным беспорядком.

Другим вариантом является NAT для исходящих подключений к локальному прокси-серверу, который может считывать данные, вносить какие-либо изменения и отправлять их всем реальному адресату (с некоторыми опциями, чтобы предотвратить повторное использование NAT'а в кружках)

0

Вы можете использовать click modular router. Это программный маршрутизатор, полностью реализованный на C++. Щелчок позволяет захватить пакеты по мере их прохождения через elements в маршрутизаторе, где вы можете изменять или собирать статистику по мере необходимости. Как модуль ядра, вы полностью переопределяете механизм маршрутизации linux и как двоичный файл userland, вы просто получаете дубликат (как вы упоминаете в своем сообщении) каждого пакета из интерфейса. Пакеты могут быть направлены через график щелчка через фильтры pcap и множество других механизмов.

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

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

  • Нет связанных вопросов^_^