Почему браузеры блокируют некоторые порты? - PullRequest
12 голосов
/ 30 ноября 2010

Я играю с веб-сокетами, и кажется, что все браузеры с собственной поддержкой веб-сокетов, которые я тестировал (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 не дал ничего полезного, к сожалению.

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

Заранее спасибо!

Ответы [ 2 ]

25 голосов
/ 30 ноября 2010

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

Во-первых, обработка случаев заблокированных портов тривиальна.Простой 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: сервер имен / WINS
  • 43: WHOIS
  • 53: DNS
  • 77: служба RJE
  • 79: Finger
  • 87: ссылка
  • 95: поддержка
  • 101: имя хоста NIC
  • 102: ISO-TSAP
  • 103: gppitnp
  • 104: ACR / NEMA
  • 109: POP2
  • 110: POP3
  • 111: SunRPC
  • 113: идентификатор
  • 115: SFTP
  • 117: служба путей UUCP
  • 119: NNTP
  • 123: NTP
  • 135: MicrosoftEPMAP
  • 139: служба сеанса NetBIOS
  • 143: IMAP
  • 179: BGP
  • 389: LDAP
  • 465: протокол Cisco
  • 512: comsat
  • 513: rlogin
  • 514: системный журнал
  • 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 .

3 голосов
/ 25 марта 2014

Для полноты ответа можно найти более полный список по этим ссылкам:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...