Как убить/прервать все TCP-соединения с помощью консоли?

Предполагая, что вы все еще находитесь в пределах времени ожидания кэша учетных данных sudo (, если вы не уверены, просто обновите его с помощью sudo -vперед запуском фрагмента ). Эта проблема возникает из-за того, что apt (-get )очень богатое консольное приложение и, таким образом, использует стандартный ввод, даже если он ничего не запрашивает у вас из-за -y.

Это можно обойти, запустив весь фрагмент в подоболочке:

В приглашении начните с ввода (, затем вставьте фрагмент, затем введите закрывающий )и нажмите клавишу возврата

Это должно уйти.

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

(PS :В зависимости от вашей системы вам может понадобиться использовать apt-get autoremoveвместо apt autoremove, а также вам может понадобиться использовать -y на updateи upgradeтакже)

0
12.07.2020, 14:15
2 ответа

Вы можете вывести из строя сетевой интерфейс -, что нарушит все соединения, а не только TCP. Причем, строго говоря, и не "перезапускает" никакие "сетевые компоненты" (вроде DHCP-клиента ).

Если вы снова откроете интерфейс и убедитесь, что вы получили (или установили )тот же IP-адрес, соединения, для которых не истекло время ожидания, даже возобновятся.

0
18.03.2021, 23:20

Вы можете использовать правило iptables. Что-то вроде этого:

$ sudo iptables -A INPUT -p tcp -m --cstate ESTABLISHED -j REJECT

илиtcpkill(часть упаковкиdsniff)

$ sudo tcpkill -i INTERFACE -9 TCPDUMP_FILTER

Обратите внимание, что в обоих случаях вам потребуется трафик, прежде чем они сработают. Если у вас запущен сеанс sshи вы запускаете что-то вроде:

$ sudo tcpkill -i INTERFACE -9 port 22

В обоих случаях соединение фактически будет разорвано только при наличии входящего/исходящего трафика (подойдет даже пакет проверки активности ). В противном случае они просто прервутся (, через них больше не будет проходить трафик ).

Если вы используете IPv6, с tcpkillвам также нужно будет прервать их.

Примечания об удалении/добавлении интерфейса

Удаление интерфейса и его повторное создание с тем же IP-адресом НЕ является решением, потому что это может привести к тому, что вы вообще ничего не сделаете. Вы можете проверить это с помощью этой простой настройки:

$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example

Теперь на двух терминалах создайте сервер:

(terminal-1) $ nc -l -s 192.0.2.1 -p 9999

и клиент:

(terminal-2) $ nc 192.0.2.1 9999

Напишите бит с обеих сторон (клиент/сервер )и посмотрите, как это работает.

Теперь удалите интерфейс:

$ sudo ip link del example

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

$ sleep 120
$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example

Введите что-нибудь. Или подождите еще немного, и вы увидите, что ваше соединение возобновится, данные не будут потеряны.

В зависимости от вашего сервера/клиента (они могут прослушивать события интерфейса и сами разрывать соединение )результатом удаления/восстановления интерфейса может быть как минимум:

  • ничего
  • чистый выход
  • нечистый выход
0
18.03.2021, 23:20

Теги

Похожие вопросы