Ответ 1
Посмотрите Scapy или другой инструмент обработки пакетов. Там не так много этого.
У меня есть простая проблема, которую я уверен, что кто-то здесь сделал это раньше...
Я хочу переписать потоки TCP/IP 4-го уровня (отдельные пакеты или фреймы не более низкого уровня). Команда Ettercap etterfilter
позволяет выполнять простые замены в реальном времени потоками TCP/IP уровня 4 на основе фиксированных строк или регулярных выражений. Пример кода сценария 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. Таким образом, я могу тихо фильтровать трафик, идущий с любого направления без проблем с NAT. Обратите внимание, что мой фильтр - это приложение, которое действует как фильтр каналов, аналогично дизайну фильтров командной строки unix:
>[eth0] <----------> [my filter] <----------> [eth1]<
Мой фильтр будет функцией Python для пользовательского пространства.
То, что я уже знаю, но не подходит:
Tun/Tap - работает на более низком слое пакета, мне нужно работать с потоками более высокого уровня.
Ettercap - я не могу найти способ сделать замены, кроме ограниченных возможностей в приведенном выше примере.
Включение в какое-то программное обеспечение VPN? - Я просто не могу понять, что именно так.
libnetfilter_queue - работает с более низкими пакетами, а не потоками TCP/IP.
Опять же, переписывание должно происходить на транспортном уровне (уровень 4), как в этом примере, вместо подхода на основе пакетов на более низком уровне. Точный код очень поможет!
Спасибо!
Посмотрите Scapy или другой инструмент обработки пакетов. Там не так много этого.
Ettercap, по-видимому, является проектом с открытым исходным кодом, поскольку он размещен на SourceForge. Возможно, вам стоит посмотреть, как это делается.
В то время я писал инструмент анализа сетевого трафика, используя libpcap для захвата и libnids для сборки потока.
Я не пробовал перенаправить трафик, но вы можете использовать TAP для пересылки трафика в пользовательскую программу, которая будет использовать libnids для сборки пакетов, выпустить потоки в код фильтра, затем взять поток и дизассемблировать их (I ' m довольно уверен, что libnids также имеет эту возможность) и заново внедрить их туда, где вам нужно.
Если вы хотите python, pynids, похоже, делает то, что вам нужно, но у меня нет опыта с ним.
Похоже, вы сможете написать плагин ettercap, загружающий фильтры, написанные на python. Или напишите свой собственный фильтр в C.
Почему бы просто не получить доступ к файлам DATA.data напрямую с любыми фильтрами, которые вы хотите?
Я не думаю, что вам нужно использовать search(), вам просто нужно будет создать собственный анализатор/конечный автомат.
например.
for (int я = 0; я < DATA.len; я ++) { if (DATA.data [i] == 'c') { DATA.data [i] = q } }
Заключительные мысли; (1) Я не знаю, что существует DATA.len, но похоже что-то есть. (2) Я знаю, что повторил ваш поиск/замену, но хотел показать, как вы можете сделать equiv. 'вручную'. Вы можете получить фантазию w/stuff позже. (3) Если вам нужно было отрегулировать длину пакета (или даже содержимое в этом отношении), вам, вероятно, придется рассмотреть возможность изменения размеров окон/CRC-проверок и т.д. например DATA.data [i] = "cc" будет перезаписывать два символа (возможно, не то, что вы хотите) или измените сторону пакета. Я бы предположил, что есть некоторые вызовы библиотеки, чтобы снова установить все.
PyPCAP стоит проверить, так как все это все зависит от libpcap снизу для начала. Вырежьте среднего человека!
Так как Ettercap - это open source, вы можете изменить его исходный код, чтобы делать то, что хотите. Запуск собственного C-кода для перезаписи потока TCP должен быть относительно простым. Тяжелая работа уже выполнена.
Взгляните на справочную страницу etterfilter, чтобы начать. Поиск в исходном коде для механизма фильтра (по-видимому, это интерпретатор JIT).
Я бы также попытался отправить этот вопрос авторам etterfilter, возможно, им нравится stackoverflow: -)
Примечание: для использования Python вместо C см. http://docs.python.org/release/2.5.2/ext/embedding.html