Как реализовать фильтрацию TCP пакетов по содержимому в поле Data под windows налету?
=======================================================================================

 Всем доброго времени суток!  

  

Подскажите пожалуйста решение такой задачи:  

необходимо на машине с Windows фильтровать пакеты TCP содержащие текстовые сообщения. Одни пропускать, а другие отбрасывать.  

Сообщения не шифрованные.  

Возможно ли такое реализовать средствами самой операционной системы?  

Возможно ли такое реализовать сторонними средствами (прокси-сервер или какой-то фильтр-драйвер)?  

  

Пример пакета:  

![5f8bd31ac4cc8518530609.png](https://habrastorage.org/webt/5f/8b/d3/5f8bd31ac4cc8518530609.png)  

  

Благодарю за ответы. 

<https://github.com/ntkernelcom/ndisapi> 

>  фильтровать пакеты TCP содержащие текстовые сообщения.

  

Именно в такой формулировке - нельзя.  

У TCP нет понятия "пакет" как такового.   

TCP - условно бесконечный поток данных, в котором данные передаются небольшими "порциями" в TCP-сегментах. Ваше сообщение можно передать как одним сегментом, так и множеством сегментов с 1 байтом payload'а в каждом.  

Полученные данные буферизируются приложением, а затем уже (при достаточном количестве полученных данных) обрабатываются согласно протоколу этого приложения.  

Поэтому "stateless" проверка содержимого сегмента - бесполезна.  

  

> Возможно ли такое реализовать сторонними средствами (прокси-сервер или какой-то фильтр-драйвер)?

  

Проще всего реализовать прокси-сервер, в котором будет реализована поддержка протокола приложения.  

Таким образом Вы сможете фильтровать трафик для этого приложения. 

 Используйте [WinDivert](https://reqrypt.org/windivert.html). 

 Comodo вроде умел такое. Но не уверен, как сейчас. 

 под Linux в Snort <https://www.snort.org/> можно было строить правила c критерием string в ASCII,  

так как Snort есть и под Windows то возможно это решит вашу задачу.  

детальней про создание таких правил - [manual-snort-org.s3-website-us-east-1.amazonaws.co...](http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node32.html#SECTION00451000000000000000) 

 Вопрос бессмысленный.  

  

TCP **не** содержит текстовых или не-текстовых сообщений - он содержит payload, который разбирается протоколами верхних уровней. Payload этот, как совершенно справедливо заметил [Inviz Custos](http://qna.habr.com/user/MvcBox) может быть по 1 байту на пакет TCP, которых может быть зиллион - и их все ядро обязано собрать в один общий буфер, прежде чем отдать его "наверх".  

Фильтрацию того, что приехало в payload необходимо делать на ISO/OSI 7 - после всех сборок, расшифровок и т.д.