Как убить одно 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. Таким образом, соединение не может предоставлять или получать данные, и клиент будет работать в тайм-аут.