Подтвердить что ты не робот

Отправка reset в сокетном соединении TCP/IP

Я использую pythons socket.py для создания соединения с ftp-сервером. Теперь я хочу reset соединение (отправить RST-флаг) и послушать ответ ftp-сервера. (FYI, использующий socket.send('', 'R') не работает, поскольку ОС отправляет флаг FIN вместо RST.)

4b9b3361

Ответ 1

Включите опцию сокета SO_LINGER и установите время задержки на 0 секунд. Это заставит TCP прервать соединение, когда он будет закрыт, сбросить данные и отправить RST. См. Раздел 7.5 и пример 15.21 в UNP.

В python:

def client(host, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    s.connect((host, port))
    l_onoff = 1                                                                                                                                                           
    l_linger = 0                                                                                                                                                          
    s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,                                                                                                                     
                 struct.pack('ii', l_onoff, l_linger))
    # send data here
    s.close()

Ответ 2

Чтобы отправить RST на TCP-соединение, установите для параметра SO_LINGER значение true с нулевым таймаутом, затем закройте сокет. Это сбрасывает соединение. Я не знаю, как это сделать на Python, или действительно ли вы можете это сделать.

Ответ 3

Если вы хотите реализовать свое поведение по подключению, я думаю, вам стоит попробовать Scapy. Это действительно полезная библиотека/инструмент. Он позволяет вам играть с пакетами IP/TCP/UDP/ICMP.