2012-07-14 1 views
3

Я пытаюсь проверить свой сервер WebSocket перед лицом ненадежного клиентского соединения.Какой самый простой способ принудительно отключить соединение WebSocket?

Я бы хотел, чтобы в любой момент я решительно отказался от одного соединения WebSocket на стороне клиента, не отправляя закрывающие фреймы или рукопожатие TCP FIN. Сам браузер не может этого сделать (правильно?), Потому что он изящно закрывает каждый WebSocket, когда вкладка закрыта. Другие соединения WebSocket с одного и того же хоста (я в других окнах браузера) не должны быть затронуты.

Моя система Ubuntu Linux 12.04; мой браузер Chrome (но я мог бы переключиться на любой совместимый с WebSocket браузер, чтобы проверить это).

Сервер использует Ruby и em-websocket.

Опции Я рассмотрел:

  • killall -9 $pid_of_tab, но это немного грубо, и ядро, по-видимому все еще закрывает соединение TCP
  • iptables правил брандмауэра, но это требует корень, и это трудно бросить только один соединение (с локального хоста) в то время как все остальные живые
  • , соединяющихся с другой машины, а затем отсоединить сетевой кабель или отключение Wi-Fi

Последние два будут работать, но похоже, что должен быть более простой способ. Есть идеи?

ответ

0

Вот iptables версия (предполагается, что гнездо подается на локальном хосте, порт 3000):

Чтобы добавить правило, падает весь трафик:

$ sudo iptables -A INPUT -i lo -p tcp --dport 3000 -j DROP 

Чтобы удалить это правило еще раз:

$ sudo iptables -D INPUT -i lo -p tcp --dport 3000 -j DROP 
1

Я подозреваю, что вы можете сделать это довольно легко с Fiddler или WebScarab

+0

Интересная идея, я не думал об этом. Я закончил использовать хакеры iptables, но я дам WebScarab попробовать, если мне нужно сделать это снова. – Thomas

Смежные вопросы