Как жестоко прерывать удаленные сетевые соединения в коде на Debian Stretch - PullRequest
0 голосов
/ 02 ноября 2018

Я работаю над классом связи Python, работающим на Beaglebone, который подключается / повторно подключается к удаленным хостам из моего списка доступных серверов.

Чтобы проверить переподключение, я физически отключил свою локальную сеть от маршрутизатора для имитации отключений. Я хотел бы сделать это в коде для расширенного тестирования. По сути, я хочу создать метод с именем kill_internet (timeout) , который вытащит коврик и восстановит подключение в конце тайм-аута.

Требования:

  1. Должен прерывать установленные сокеты.
  2. Отключение должно быть жестоким и безобразным - нет шансов закрыть розетку грациозно.

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

Остановка службы сети удовлетворит # 1, но не уверен, насколько это жестоко. Я думал о исходящем правиле UFW (iptables), но оно может не блокировать установленные соединения, и то же самое касается # 2.

Полагаю, я мог бы создать аппаратное 2-портовое устройство, чтобы сделать это на аппаратном уровне, но это хорошо - сложно.

Есть идеи, как поступить?

Спасибо Билл

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Я наткнулся на простое аппаратное решение, которое стоило мне 22 доллара. Amazon продает эти USB-управляемые реле за 10-15 долларов - ищите UsbRelay2. С этим я могу легко вызвать реле из кода. Для насильственного прерывания Ethernet все, что мне нужно сделать, это отключить питание Ethernet-концентратора или коммутатора. Я получил 5-портовый коммутатор за 10 долларов, который работает от 5 В от настенной бородавки. Я перерезал один из проводов питания 5 В и пропустил его через реле. Срабатывание реле отключает питание коммутатора. Так как это все 5В, проводка полностью безопасна и не нужна. Это заняло всего 3 минуты.

0 голосов
/ 02 ноября 2018

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

  1. Отклонять запросы на соединение с активным отказом (легко обрабатывается на клиенте).
  2. Отбросить промежуточный поток соединения с помощью пакета сброса (опять же, с ним легко иметь дело).
  3. Внезапно перестает отвечать на пакеты с IP-адреса клиента, среднего соединения. Это имитирует отключение кабеля в части сети, которой вы не владеете, и с клиентом труднее всего с ней справиться, потому что вы должны подумать о том, что является разумным временем ожидания.

Если вы работаете в Linux, для реализации этих правил можно написать сценарий iptables.

...