Skip to content

Instantly share code, notes, and snippets.

Created October 5, 2017 09:45
Show Gist options
  • Select an option

  • Save anonymous/eea3aef2e62ebbfb25435b8e332b6e95 to your computer and use it in GitHub Desktop.

Select an option

Save anonymous/eea3aef2e62ebbfb25435b8e332b6e95 to your computer and use it in GitHub Desktop.
Если (IP-протокол пакета == 0x06 (TCP)) {
Декодирование полученного пакета в контексте TCP-протокола
Применение аккумулированых изменений в SEQ и ACK числах TCP-потока для данного пакета
Если (пакет исходящий и тело пакета начинается с одного из HTTP термов ["GET", "HEAD", "POST", "PUT", "DELETE", "TRACE", "CONNECT"]) {
Найти конец заголовков и добавить заголовок с именем пользователя в кодировке UTF8
Вернуть сообщение об изменении пакета
}
}
Если (IP-протокол пакета == 0x06 (TCP) и пакет исходящий) {
Добавить IP-опцию метки
Вернуть сообщение об изменении пакета
}
Инициализация локальных переменных
Разбор аргументов командной строки и инициализация модулей приложения
Открытие дескриптора коммуникации userspace <-> kernelspace с драйвером windivert на основе строки фильтра пакетов
Нахождение значений MTU доступных интерфейсов
Установка обработчиков сигналов процессу
Логирование старта работы
Цикл (пока дескриптор windivert актуален) {
Получение пакета в userspace от windivert
Декодирование полученного пакета в контексте IP-протокола
Применение модулей к IP-пакету
Если(хотя бы один модуль изменил пакет или разрешил его передачу без изменений) {
Пакет кодируется обратно согласно IP-протоколу, при необходимости фаргментируется в соответствии с MTU
}
}
В случае получения сигнала SIGINT или SIGTERM, логируется завершение работы
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment