Почему браузеры блокируют некоторые порты?

Я играю с веб-сайтами, и кажется, что все браузеры с поддержкой родных веб-камер, которые я тестировал с помощью (Safari, Chrome), блокируют некоторые порты. Если я попытаюсь подключиться к моему серверу через порт 80, то все работает отлично. Если я попробую другие порты, например 81, 82 или 1000, соединение преждевременно закрывается, потому что на другом конце ничего нет. Это ожидаемое поведение и прекрасно работает.

Однако с некоторыми портами (например, 20, 37 или 79) консоль разработчика Chrome просто говорит WebSocket port 79 blocked, но мой JS-код не получает никакой информации об этом (даже некий тайм-аут). Safari немного более подробный и комментарии SECURITY_ERR: DOM Exception 18: An attempt was made to break through the security policy of the user agent.

Итак, мои вопросы таковы:

Как я могу надежно обнаружить, что порт заблокирован?
Должен ли я устанавливать тайм-аут и проверять его вручную? Это не самый умный способ сделать это, хотя это может быть единственный способ сделать это кросс-браузер.

Где я могу найти список заблокированных портов?
Мой поисковый запрос Google не добавил ничего полезного, к сожалению.

Почему блокируются эти порты в первую очередь?

Спасибо заранее!

Ответ 1

Хорошо, я нашел ответ. Иногда вы просто не видите лес для деревьев.

Во-первых, обработка заблокированных портов тривиальна. Простой try/catch делает трюк. Я был просто смущен тем, как Chrome показал это исключение и не сразу распознал его как таковое (я обычно использую Firefox).

Во-вторых, Спецификация API WebSockets явно указывает, что

Если порт представляет собой порт, на который пользовательский агент настроен на блокировку доступа, затем выведите исключение SECURITY_ERR. (Пользовательские агенты обычно блокируют доступ к известным портам, таким как SMTP.)

В каких портах подразумевается именно то, что похоже на реализацию Websocket браузера. Мои тесты показали, что Chrome и Safari блокируют следующие порты (были протестированы только порты ниже 1024):

  • 1: TCPMUX
  • 7: Протокол эхо-сигнала
  • 9: Отменить протокол
  • 11: служба systat
  • 13: Дневной протокол
  • 15: служба Netstat
  • 17: Цитата дня
  • 19: Протокол генератора символов
  • 20: FTP
  • 21: FTP
  • 22: SSH
  • 23: Telnet
  • 25: SMTP
  • 37: протокол TIME
  • 42: nameserver/WINS
  • 43: WHOIS
  • 53: DNS
  • 77: Служба RJE
  • 79: Finger
  • 87: link
  • 95: supdup
  • 101: имя хоста NIC
  • 102: ISO-TSAP
  • 103: gppitnp
  • 104: ACR/NEMA
  • 109: POP2
  • 110: POP3
  • 111: SunRPC
  • 113: ident
  • 115: SFTP
  • 117: Служба путей UUCP
  • 119: NNTP
  • 123: NTP
  • 135: Microsoft EPMAP
  • 139: Служба сеансов NetBIOS
  • 143: IMAP
  • 179: BGP
  • 389: LDAP
  • 465: протокол Cisco
  • 512: comsat
  • 513: rlogin
  • 514: Syslog
  • 515: Датчик линейного принтера
  • 526: темп
  • 530: RPC
  • 531: IRC
  • 532: netnews
  • 540: UUCP
  • 556: RFS
  • 563: NNTPS
  • 587: SMTP
  • 601: неизвестно
  • 636: LDAPS
  • 993: IMAPS
  • 995: POP3S

Связанные службы берутся из списка номеров портов TCP и UDP на Wikipeda.