У меня есть приложение для 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-мосты и их модификация.)
Я бы сказал, что вы переоцениваете это. 'tcpdump' должно быть достаточно для анализа пакетов и статистики. –