Могу ли я создать прослушивающий сокет TCP, используя необработанные сокеты в Linux? - PullRequest
4 голосов
/ 01 декабря 2010

Я хотел бы создать прослушивающий сокет TCP, где я мог бы контролировать, когда он отвечает клиенту с первым SYN + ACK после того, как он получает первоначальный пакет SYN от клиента.ввести некоторые задержки или игнорировать некоторые начальные пакеты SYN.Я могу сделать это с помощью iptables на данный момент, но мне интересно, можно ли это сделать с помощью интерфейса сокета ОС.

Обратите внимание, что если я использую обычный сокет TCP, сервер вызовет listen () надескриптор сокета, ОС установит соединение, когда к нему подключится клиент.

Интересно, могу ли я использовать необработанные сокеты для реализации этого поведения.Все примеры, которые я до сих пор видел о необработанных сокетах, касаются активных сокетов (клиент-сервер), а не пассивных сокетов (прослушивающие сокеты).

Ответы [ 3 ]

3 голосов
/ 15 декабря 2010

Теоретически вы можете написать свою собственную реализацию TCP через необработанные сокеты. Но ядро ​​все равно будет реагировать на любые входящие TCP-пакеты до того, как ваш необработанный сокет получит копию. Так что вам придется обойти это, используя iptables или что-то еще, чтобы заблокировать ядро ​​от просмотра пакетов, которые вас интересуют.

Я думаю, было бы проще сделать это в модуле ядра через интерфейс netfilter (что может быть тем, что вы уже делаете). Вы также можете проверить libnetfilter_queue, который может сработать, если вы действительно хотите сделать это в пользовательском пространстве.

1 голос
/ 07 декабря 2010

Посмотрите на проект Honeynet, они реализуют недорогие виртуальные машины с базовым стеком IP для настройки работы протокола TCP.

https://projects.honeynet.org/sebek/browser/linux-2.6/trunk/src

0 голосов
/ 02 декабря 2010

Не понимаю, почему нет.Перед вами много работы ;-) Я полагаю, что существуют уже существующие пакеты или продукты, которые уже могут делать подобные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...