Чтобы не забыть

Столкнулся с интересным поведением Linux при попытке изобразить TCP-соединение с помощью “сырых” сокетов (raw sockets), точнее, чего-то на них похожего. Как только на не открытый “явно” (с помощью bind() и listen()) TCP-порт прилетал какой-либо пакет, что-то в составе операционной системы кидало в ответ пакет с флагом RST. Лечится такое поведение двумя способами – можно либо “недосоздать” сокет (вызвать bind(), listen() и не вызывать accept()), либо добавить правило в iptables, не позволяющее отправлять пакеты с RST – что-нибудь в таком роде:

iptables -I OUTPUT -p tcp --tcp-flags RST RST -j DROP

Комментарии отключены.