Как убить одно TCP-соединение в Linux?

У меня есть процесс, который открывает несколько tcp-соединений с несколькими браузерами на отдельных портах.

использование netsat вывод примерно такой:

tcp 0 0 server1.something:myprog client1.something:49987 ESTABLISHED
tcp 0 0 server1.something:myprog client1.something:65987 ESTABLISHED
tcp 0 0 server1.something:myprog client1.something:89987 ESTABLISHED

теперь я хотел бы убить точно одно из подключений? Как мне это сделать? (Так как убийство процесса убьет все соединения)

2 ответов


вот несколько вариантов:

  • прикрепите с gdb и вызовите close () на fd. Можно сопоставить с эл/порт в номер inode через /proc/сеть/TCP и из inode номер ФД внутри процесса с LS -ля в /proc/$PID в/ФД.
  • подделать первый пакет. Вам нужно будет сгенерировать его локально и каким-то образом угадать номер SEQ.
  • возможно, настройте правило iptables для создания первого в следующем пакете.
  • написать модуль ядра.

там не похоже, что это хорошо поддерживаемый способ сделать это. Вполне вероятно, что процессы будут сбой, если их FDs неожиданно закрыты в любом случае.


вы не можете убить ни одного соединения процесса.

но вы можете заблокировать его с iptables. Таким образом, соединение не может предоставлять или получать данные, и клиент будет работать в тайм-аут.