У меня есть простая проблема, которая я уверен, что кто-то здесь сделал прежде...
Я хочу переписать Уровень 4 потоки TCP/IP (Не пакеты человека нижнего уровня или кадры.) Ettercap etterfilter
команда позволяет Вам выполнить простые живые замены Уровня 4 потоки TCP/IP на основе фиксированных строк или regexes. Пример ettercap пишущий сценарий кода:
if (ip.proto == TCP && tcp.dst == 80) {
if (search(DATA.data, "gzip")) {
replace("gzip", " ");
msg("whited out gzip\n");
}
}
if (ip.proto == TCP && tcp.dst == 80) {
if (search(DATA.data, "deflate")) {
replace("deflate", " ");
msg("whited out deflate\n");
}
}
http://ettercap.sourceforge.net/forum/viewtopic.php?t=2833
Я хотел бы переписать потоки на основе своей собственной программы фильтра вместо просто замен простой строки. У кого-либо есть идея того, как сделать это? Есть ли что-нибудь кроме Ettercap, который может сделать живую замену как это, возможно, как плагин к программному обеспечению VPN или чему-то?
Я хотел бы иметь конфигурацию, подобную тихой соединенной мостом конфигурации сниффинга ettercap между двумя интерфейсами Ethernet. Таким образом, я могу тихо отфильтровать трафик, прибывающий из любого направления без проблем NATing. Обратите внимание, что мой фильтр является приложением, которое действует как фильтр канала, подобный дизайну фильтров командной строки Unix:
>[eth0] <----------> [my filter] <----------> [eth1]<
Мой фильтр будет пространством пользователя функция Python.
О чем я уже знаю, но не подхожу:
Бочка/Касание - Работы над более низким пакетным уровнем, я должен работать с более высокими потоками слоя.
Ettercap - Я не могу найти способ сделать замены кроме ограниченных возможностей в примере выше.
Сцепление в некоторое программное обеспечение VPN? - Я просто не могу выяснить который или точно как.
libnetfilter_queue - Работы с пакетами нижнего уровня, не потоки TCP/IP.
Снова, перезапись должна произойти на транспортном уровне (Уровень 4), как это делает в этом примере вместо нижнего уровня основанный на пакете подход. Точный код поможет очень!
Спасибо!
Ettercap, похоже, является проектом с открытым исходным кодом, поскольку он размещен на SourceForge. Возможно, вам стоит посмотреть, как он это делает.
Похоже, вы сможете написать плагин ettercap, который загружает фильтры, написанные на python. Или вместо этого напишите свой собственный фильтр на C.
Почему бы просто не получить доступ к DATA.data напрямую с любыми фильтрами, которые вы хотите?
Я не думаю, что вам нужно использовать search(), вам просто придется построить свой собственный анализатор / машину состояний.
например,
for (int i = 0; i < DATA.len; i++) { if ( DATA.data[i] == 'c' ) { DATA.data[i] = q } }
Заключительные мысли; (1) Я не знаю, что DATA.len существует, но кажется вероятным, что что-то есть. (2) Я знаю, что воспроизвел ваш поиск / замену, но хотел показать, как вы можете сделать то же самое "вручную". Позже вы сможете придумывать что-то новое. (3) Если вы хотите изменить длину пакета (или даже его содержимое, если на то пошло), вам, вероятно, нужно рассмотреть возможность изменения размеров окна / проверки CRC и т.д. Например, DATA.data[i] = "cc" перезапишет два символа (возможно, не то, что вам нужно) или изменит сторону пакета. Я предполагаю, что есть некоторые библиотечные вызовы, чтобы снова установить все правильно.
PyPCAP заслуживает внимания, поскольку все это для начала зависит от libpcap. Избавьтесь от среднего человека!
Взгляните на Scapy или другой инструмент для создания пакетов. Таких не так много.
В то время я писал инструмент анализа сетевого трафика, используя libpcap для захвата и libnids для сборки потока.
Я не пробовал повторно вводить трафик, но вы можете использовать TAP для перенаправления трафика в пользовательскую программу, которая будет использовать libnids для сборки пакетов, выводить потоки в код фильтра, затем брать поток и дизассемблировать их (я ' m почти уверен, что у libnids есть такая возможность) и повторно вставьте их туда, где вам нужно.
Если вам нужен python, pynids , похоже, сделает то, что вам нужно, но у меня нет опыта с этим.
Поскольку Ettercap является opensource, вы можете изменить его исходный код, чтобы сделать то, что вы хотите. Запуск собственного кода на C для переписывания TCP-потока должен быть относительно простым. Тяжелая работа уже проделана.
Для начала посмотрите на страницу etterfilter man. Поищите в исходном коде движок фильтра (очевидно, это JIT-интерпретатор).
Я бы также попробовал отправить этот вопрос авторам etterfilter, возможно, им нравится stackoverflow :-)
Примечание: чтобы использовать Python вместо C, смотрите http://docs.python.org/release/2.5.2/ext/embedding.html