Как сохранить сокет видимым после закрытия соединения?

Можно ли настроить Linux так, чтобы tcp-соединение оставалось видимым для netstat/lsof после закрытия? (не имеет значения состояние соединения). Мне нужно обнаружить его с помощью netstat/lsof, но если соединение очень короткое, оно не обнаруживается.

Сокет, который я не могу зарегистрировать, кажется, тот, который получает первый FIN


person tremendows    schedule 16.01.2014    source источник
comment
Вы путаете сокет и порты. Сокеты закрываются сразу, как только вы их закрываете. Порты могут переходить в различные состояния после подключения перед закрытием. В netstat вы видите порты, а не сокеты.   -  person user207421    schedule 19.01.2014
comment
@EJP Моя проблема, похоже, заключается в обнаружении процессов, связанных с эфемерными портами, потому что их состояния очень короткие. Есть ли способ обнаружить процессы, связанные с этими эфемерными портами?   -  person tremendows    schedule 20.01.2014


Ответы (1)


Это зависит от того, какой конец закрывает соединение первым.

Порт, который закрывается первым (отправляет первый FIN), некоторое время будет находиться в состоянии TIME_WAIT, количество секунд по умолчанию равно /proc/sys/net/ipv4/tcp_fin_timeout и обычно составляет 60 секунд, поэтому вы можете увидеть их с помощью netstat после того, как программа закроет порт. разъем.

Вы можете настроить это, если вам нужно, echo 120 > /proc/sys/net/ipv4/tcp_fin_timeout

Одноранговый порт (тот, который получает первый FIN), кажется, стирается сразу после того, как он получил FIN и отправляет FIN со своего конца - я не нашел ничего, чтобы настроить это поведение.

person nos    schedule 16.01.2014
comment
Сокет, который я не могу зарегистрировать, кажется, тот, который получает первый FIN, я уточню при вопросе и жду других идей. Спасибо. - person tremendows; 16.01.2014