Nano Hash - криптовалюты, майнинг, программирование

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

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



Ответы:


1

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

В питоне:

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()
22.06.2011
  • Это заставит TCP прервать соединение при закрытии, отбросить все ожидающие данные и отправить RST. 24.06.2011
  • Еще немного информации по этому поводу для любопытных: SO_LINGER со временем 0 секунд означает, что стек TCP не будет задерживаться на close(): он отбросит все неотправленные данные и отправит RST вместо FIN. Для получения дополнительной информации прочитайте это и это. 28.07.2012
  • Обратите внимание: если вы используете этот код в среде Microsoft Windows, вам необходимо заменить «ii» в вызове struct.pack() на «hh». Windows использует шорты в struct linger, где Linux использует целые числа. 05.05.2015

  • 2

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

    22.06.2011

    3

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

    22.06.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..