Нежелательный RST TCP-пакет с Scapy - PullRequest
21 голосов
/ 30 января 2012

Чтобы понять, как работает TCP, я попытался создать свой собственный TCP SYN / SYN-ACK / ACK (на основе учебника: http://www.thice.nl/creating-ack-get-packets-with-scapy/).

Проблема в том, что всякий раз, когда мой компьютер получает SYN-ACK от сервера, он генерирует пакет RST, который останавливает процесс подключения.

Я пробовал на OS X Lion и на Ubuntu 10.10 Maverick Meerkat, оба сбросили соединение. Я нашел это: http://lkml.indiana.edu/hypermail/linux/net/0404.2/0021.html, Я не знаю, является ли это причиной.

Кто-нибудь может мне сказать, в чем может быть причина? И как избежать этой проблемы?

Спасибо.

Ответы [ 3 ]

25 голосов
/ 06 февраля 2012

В статье, которую вы цитировали, об этом довольно ясно сказано ...

Поскольку вы не завершаете полное TCP-рукопожатие, ваша операционная система может попытаться взять управление под контроль и начать отправку пакетов RST (сброс)чтобы избежать этого, мы можем использовать iptables:

iptables -A OUTPUT -p tcp --tcp-flags RST RST -s 192.168.1.20 -j DROP

По сути, проблема в том, что scapy работает в пространстве пользователя, и ядро ​​linux сначала получит SYN-ACK.Ядро отправит RST, потому что у него не будет открытого сокета для рассматриваемого номера порта, прежде чем вы сможете что-либо сделать с scapy.

Решение (как упоминается в блоге) состоит в том, чтодля брандмауэра вашего ядра от отправки пакета RST.

4 голосов
/ 13 мая 2016

Статья в блоге, цитируемая в других ответах, не совсем верна. Дело не только в том, что вы не завершаете трехстороннее рукопожатие, но и в том, что стек IP ядра не знает, что происходит соединение. Когда он получает SYN-ACK, он отправляет RST-ACK, потому что это неожиданно. Получение первого или последнего действительно не входит в это. Стек получает SYN-ACK является проблемой.

Использование IPTables для отбрасывания исходящих RST пакетов является распространенным и верным подходом, но иногда вам нужно отправить RST из Scapy. Более сложный, но очень работоспособный подход состоит в том, чтобы идти ниже, генерируя и реагируя на ARP с MAC, который отличается от хоста. Это позволяет вам иметь возможность отправлять и получать что-либо без какого-либо вмешательства со стороны хоста.

Очевидно, что это больше усилий. Лично я использую этот подход (в отличие от подхода RST отбрасывания), когда мне действительно нужно отправить RST сам.

4 голосов
/ 18 декабря 2013

У меня нет ответа не-iptables, но можно решить проблему сброса. Вместо того чтобы пытаться отфильтровать исходящий сброс в таблице фильтров, отфильтруйте все входящие пакеты от цели в необработанной таблице. Это препятствует тому, чтобы возвращенные пакеты от цели даже были обработаны ядром, хотя scapy все еще видит их. Я использовал следующий синтаксис:

iptables -t raw -A PREROUTING -p tcp --dport <source port I use for scapy traffic> -j DROP

Это решение заставляет меня использовать тот же порт источника для моего трафика; не стесняйтесь использовать свой собственный iptables-fu для определения возвращаемых пакетов вашей цели.

...