Linux закрыть сетевое соединение

Linux закрыть сетевое соединение

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

Нужно (для тестировани демона) жестко порвать established tcp соединение.

P.S. На Винде это можео сделать с помощью TcpView от Sysinternal.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Оглавление

  • Как разорвать ESTABLISHED соединение? (Linux), jonatan, 12:56 , 14-Фев-06, (1)
  • Как разорвать ESTABLISHED соединение? (Linux), StSphinx, 13:28 , 14-Фев-06, (2)
    • Как разорвать ESTABLISHED соединение? (Linux), lomo, 15:57 , 14-Фев-06, (3)
      • Как разорвать ESTABLISHED соединение? (Linux), idle, 17:21 , 14-Фев-06, (4)

Сообщения по теме [Сортировка по времени, UBB]

netstat -tp | grep ESTABLISHED
kill PID

1. «Как разорвать ESTABLISHED соединение? (Linux)»
Сообщение от jonatan (ok) on 14-Фев-06, 12:56
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. «Как разорвать ESTABLISHED соединение? (Linux)»
Сообщение от StSphinx (??) on 14-Фев-06, 13:28

>Простите за тупой вопрос, но надо срочно, а я сижу и офигеваю
>от того, что непонимаю как это сделать.
>
>Нужно (для тестировани демона) жестко порвать established tcp соединение.
>
>
>P.S. На Винде это можео сделать с помощью TcpView от Sysinternal.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. «Как разорвать ESTABLISHED соединение? (Linux)»
Сообщение от lomo on 14-Фев-06, 15:57

нету такого в RHEL4ES ;-/ ну или я не нашел.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. «Как разорвать ESTABLISHED соединение? (Linux)»
Сообщение от idle (ok) on 14-Фев-06, 17:21

>
>>man tcpkill
>
>нету такого в RHEL4ES ;-/ ну или я не нашел.
Наверно имелось ввиду tcpdrop.

Источник

Убить tcp соединение в linux

У меня есть какое-то мертвое соединение в одном приложении, которое находится в зависшем состоянии, если клиентская машина мертва.

Есть ли способ прекратить эти опции из командной строки Linux без перезагрузки сервера?

После поиска я нашел решение под названием tcpkill. Но это не сработает для меня. Так как он постоянно блокирует этот ip.

Чтобы «убить» сокет, вы должны отправить пакет сброса TCP. Чтобы отправить его (и принять другую сторону), вы должны знать фактический порядковый номер TCP.

1) Уже упомянутый tcpkill метод изучает номер SEQ путем пассивного прослушивания в сети и ожидания получения действительных пакетов этого соединения. Затем он использует полученный номер SEQ для отправки пакетов RSET обеим сторонам. Однако, если соединение неактивно / зависло и данные не передаются, оно ничего не будет делать и будет ждать вечно.

2) Другой метод использует скрипт perl, который называется killcx ( ссылка на Sourceforge ). Это активно отправляет поддельные пакеты SYN и узнает номер SEQ из ответа. Затем он отправляет пакеты RSET так же, как tcpkill .

Альтернативный подход (основанный на том, чего вы хотите добиться) — использовать gdb отладчик для подключения к процессу, владеющему этим сокетом / соединением, и close() выполнять системный вызов от его имени — как подробно описано в этом ответе .

Если вы хотите работать только с зависшими соединениями (другая сторона не работает), существуют различные таймауты (например, TCP keepalive), которые должны автоматически закрывать такие соединения, если в системе правильно настроены.

Источник

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

как закрыть соединение

Модератор: Bizdelnick

как закрыть соединение

Сообщение masterprime » 21.07.2009 20:06

Re: как закрыть соединение

Сообщение nesk » 21.07.2009 20:40

если добавить к команде netstat -a ключик -p можно увидеть PID процессов, которые держат соединения. Вот если их типа kill-нуть, соединение будет прервано.

Кроме того, если уже это ssh сессия, то можно посмотреть вывод команды who. Посмотреть какие пользователи зашли, посмотреть их процессы ps -u имяпользователя. И kill-нуть их все (хотя достаточно убить только, тот процесс, который является лидером сессии)

Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

Re: как закрыть соединение

Сообщение masterprime » 21.07.2009 20:49

если добавить к команде netstat -a ключик -p можно увидеть PID процессов, которые держат соединения. Вот если их типа kill-нуть, соединение будет прервано.

Кроме того, если уже это ssh сессия, то можно посмотреть вывод команды who. Посмотреть какие пользователи зашли, посмотреть их процессы ps -u имяпользователя. И kill-нуть их все (хотя достаточно убить только, тот процесс, который является лидером сессии)

однако netstat с ключами -а -р, показывает PID-ы самих процессов сервисов и убивая по этим PID-ам я и грохну тотже sshd, например, а мне эт не нада.

Источник

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

Что делать, если у вас уже есть сетевое соединение с типом ESTABLISHED и его нужно принудительно убить? Не всегда файервол сможет это сделать да и не всегда это удобно. Выход есть:

— tcpkill из набора dsniff (Linux only)
— Killcx (Linux only)
— tcpdrop (BSD/Solaris only)
— CurrPorts (Windows only)
— Cutter (Linux only)

Расскажу вкратце о каждой из них.

tcpkill

Достаточно простая утилита как при установке (не тянет много зависимостей) так и в использовании. Приведу несколько примеров использования:

Общий вид
#tcpkill -i eth0

Убить исходящее соединение с 21-го порта ftp
#tcpkill -i eth0 port 21

Убить все соединения с хоста 192.168.1.2/host12.nixcraft.com
#tcpkill host 192.168.1.2
#tcpkill host host12.nixcraft.com

Убить все соединения между хостом 192.168.1.2 и всеми, кроме хоста 192.168.1.111
#tcpkill ip host 192.168.1.2 and not 192.168.1.111

Killcx

Официальный сайт http://killcx.sourceforge.net/

Написана на perl’e и тянет много зависимых модулей, и при этом умеет убивать соединения только по признаку dest.
Синтаксис и пример использования:

tcpdrop

Входит в стандартную поставку BSD систем (проверял на FreeBSD/OpenBSD, для Solaris нужно искать pkg, но он есть на http://www.sunfreeware.com/) и по своей сути тоже проста. Но требует обязательно указания src/dst а так же портов src/dst. Синтаксис таков:

#tcpdrop local-address local-port foreign-address foreign-port

Сейчас tcpdrop для Solaris недоступен. Есть некий аналог его, но это немного не то. Либо попробовать собрать из исхдников

CurrPorts

Официальный сайт http://www.nirsoft.net/utils/cports.html

Программа для windows пользователей с приятным интерфейсом. Показывает текущие открытые соединения и при надобности их можно завершить.

Cutter

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

Источник

Рабочий метод разрыва конкретного активного соединения из командной строки linux (drop/kill/cut/close ESTABLISHED connection)

Иногда бывает необходимо принудительно разорвать активное соединение. Самый распространенный способ:

netstat -na
kill PID

Проблема в том, что один воркер может одновременно обслуживать несколько соединений, поэтому правильнее будет убить соединение а не воркер. Для этого на многих форумах рекомендуют использовать tcpkilll, cutter или awk+hping3. Однако, хоть эти утилиты и находятся в официальных репозиториях, мне не удалось заставить их разрывать соединения.

После продолжительных поисков был обнаружен perl скрипт killcx, разрывающий соединение по удаленному хосту и порту.

killcx 94.133.119.242:4403

[PARENT] checking connection with [94.133.119.242:4403]
[PARENT] found connection with [78.220.184.126:80] (ESTABLISHED)
[PARENT] forking child
[CHILD] interface not defined, will use [eth0]
[CHILD] setting up filter to sniff ACK on [eth0] for 5 seconds
[CHILD] hooked ACK from [77.220.184.126:80]
[CHILD] found AckNum [3091573605] and SeqNum [3105164779]
[CHILD] sending spoofed RST to [78.220.184.126:80] with SeqNum [3091573605]
[CHILD] sending RST to remote host as well with SeqNum [3105164779]
[CHILD] all done, sending USR1 signal to parent [13723] and exiting
[PARENT] received child signal, checking results.
=> success : connection has been closed !

Для его работы требуется целый набор библиотек.

apt-get install \
libpcap0.8 \
libpcap-dev \
libnet-pcap-perl \
libyaml-perl \
libyaml-dev \
libyaml-0-1 \
-y

cpan -i \
Net::RawIP \
NetPacket::Ethernet

Источник

Читайте также:  Посмотреть примонтированные разделы linux
Оцените статью