Неожиданное TCP-соединение без привязки порта серверомLinux

Ответить Пред. темаСлед. тема
Anonymous
 Неожиданное TCP-соединение без привязки порта сервером

Сообщение Anonymous »

Я пытаюсь в цикле подключиться к сокету TCP в качестве клиента. Я ожидаю, что я не смогу установить соединение, пока сервер не свяжет сокет. Однако по прошествии 15–20 минут сценарий устанавливает соединение, даже если ни один сервер не работает.
Мой код выглядит следующим образом:

Код: Выделить всё

import socket
import time

# Server details
HOST = 'localhost'  # The server's hostname or IP address
PORT = 34040       # The port used by the server

# Retry interval in seconds
RETRY_INTERVAL = 0.1  # 100 milliseconds

def try_connect():
i = 0
while True:
i += 1
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
print(f"Connected to {HOST}:{PORT}")
# If you want to do something after connecting, add the code here
break  # Exit the loop if connection is successful
except ConnectionRefusedError:
print(f"Connection failed, retrying in {RETRY_INTERVAL * 1000}ms, iteration {i}")
time.sleep(RETRY_INTERVAL)

if __name__ == "__main__":
try_connect()
Ожидаемое поведение:
Цикл будет выполняться до тех пор, пока сервер не привяжет порт.
К сожалению, в этой ситуации примерно через 15-20 минут скрипт способен установить соединение:

Код: Выделить всё

Connection failed, retrying in 100.0ms, iteration 14113
Connection failed, retrying in 100.0ms, iteration 14114
Connection failed, retrying in 100.0ms, iteration 14115
Connected to localhost:34040
Пытаемся увидеть, какой процесс выступает в качестве сервера в этом соединении с помощью lsof:

Код: Выделить всё

user@linux:~$ sudo lsof -i :34040
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python    3738 root   47u  IPv4  19139      0t0  TCP linux:34040->linux:34040 (ESTABLISHED)
Я пробовал и другие вещи:

Код: Выделить всё

netstat -ntcpav | grep 'localhost:34040'
и смотрим -n 0.1 ss -ntap | grep 'localhost:34040' в файл журнала и отслеживать этот файл журнала, но результаты были в лучшем случае неубедительными, ни один из этих инструментов не нашел сокет, который привязывает порт. Кажется, соединение просто происходит.
Это результат выполнения этих команд
Я также пробовал разные порты, но проблема все еще возникает (8080, 33000). Кроме того, увеличение RETRY_INTERVAL, похоже, усложняет воспроизведение проблемы: если при 100 мс это занимало в среднем менее 20 минут, при 500 мс — чуть меньше часа.
Моя машина — это Версия ядра Linux 4.9.224 aarch64, но это также воспроизводится на виртуальных машинах 5.4.0-176 x86_64 и 6.1.46 x86_64.
Я ищу информацию о том, почему происходит это неожиданное соединение . Будем очень признательны за любые советы о дальнейших шагах по диагностике или решению этой проблемы.
Изменить:
Также журнал tcpdump:

Код: Выделить всё

14:31:33.399814 IP localhost.34026 > localhost.34030: Flags [S], seq 897561866, win 65495, options [mss 65495,sackOK,TS val 2043122074 ecr 0,nop,wscale 7], length 0
14:31:33.399816 IP localhost.34030 > localhost.34026: Flags [R.], seq 0, ack 242264763, win 0, length 0
14:31:33.499948 IP localhost.34030 > localhost.34030: Flags [S], seq 2164477081, win 65495, options [mss 65495,sackOK,TS val 2043122174 ecr 0,nop,wscale 7], length 0
14:31:33.499952 IP localhost.34030 > localhost.34030: Flags [S.], seq 2164477081, ack 2164477082, win 65495, options [mss 65495,sackOK,TS val 2043122174 ecr 2043122174,nop,wscale 7], length 0
14:31:33.499954 IP localhost.34030 > localhost.34030: Flags [.], ack 1, win 512, options [nop,nop,TS val 2043122174 ecr 2043122174], length 0
14:31:33.499973 IP localhost.34030 > localhost.34030: Flags [F.], seq 1, ack 1, win 512, options [nop,nop,TS val 2043122174 ecr 2043122174], length 0
14:31:33.499976 IP localhost.34030 > localhost.34030: Flags [.], ack 2, win 512, options [nop,nop,TS val 2043122174 ecr 2043122174], length 0
Мне кажется, что клиенту удается подключиться к самому себе после множества попыток. Разве это не то, что ОС должна каким-то образом запрещать?

Подробнее здесь: https://stackoverflow.com/questions/786 ... g-the-port
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неожиданное TCP-соединение без привязки порта сервером
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Прослушивание порта в С# (а не TCP-порта)
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • TCP-сокетное соединение работает по IP, но не работает с доменным php VPS-сервером
    Anonymous » » в форуме Php
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Соединение HttpClientConnectionManager не использует повторно TCP-соединение при подключении к конечной точке https
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Соединение HttpClientConnectionManager не использует повторно TCP-соединение при подключении к конечной точке https
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»