Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
222 views
in Technique[技术] by (71.8m points)

javascript - Why do browsers block some ports?

I'm playing around with websockets and it appears, that all browsers with native websocket support I tested with (Safari, Chrome) block some ports. If I try to connect to my server over port 80, everyting works fine. If I try other ports, like 81, 82 or 1000, the connection is prematurely closed because there's nothing on the other end. That's the expected behaviour and it works beautifully.

However, with some ports (such as 20, 37 or 79), the Chrome developer console simply says WebSocket port 79 blocked but my JS code doesn't receive any information about this (not even some sort of timeout). Safari is a little more verbose and comments SECURITY_ERR: DOM Exception 18: An attempt was made to break through the security policy of the user agent.

So my questions are these:

How can I reliably detect that a port is blocked?
Do I have to set a timeout and check that manually? That doesn't seem to be the smartest way to go about it, although it might be the only way to do it cross-browser.

Where can I find a list of the blocked ports?
My Google search didn't turn up anything useful, unfortunately.

Why are these ports blocked in the first place?

Thanks in advance!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Okay, I found the answer. Sometimes you just don't see the forest for the trees.

First off, handling cases of blocked ports is trivial. A simple try/catch does the trick. I was simply confused by the way Chrome displayed that exception and didn't recognize it as such right away (I usually use Firefox).

Secondly, the WebSockets API Specification explicitly states that

If port is a port to which the user agent is configured to block access, then throw a SECURITY_ERR exception. (User agents typically block access to well-known ports like SMTP.)

What ports exactly are meant by that appears to be up to the browser's Websocket implementation. My tests have shown that Chrome and Safari block the following ports (only ports below 1024 were tested):

  • 1: TCPMUX
  • 7: Echo Protocol
  • 9: Discard Protocol
  • 11: systat service
  • 13: Daytime Protocol
  • 15: Netstat service
  • 17: Quote of the Day
  • 19: Character Generator Protocol
  • 20: FTP
  • 21: FTP
  • 22: SSH
  • 23: Telnet
  • 25: SMTP
  • 37: TIME protocol
  • 42: nameserver/WINS
  • 43: WHOIS
  • 53: DNS
  • 77: RJE Service
  • 79: Finger
  • 87: link
  • 95: supdup
  • 101: NIC host name
  • 102: ISO-TSAP
  • 103: gppitnp
  • 104: ACR/NEMA
  • 109: POP2
  • 110: POP3
  • 111: SunRPC
  • 113: ident
  • 115: SFTP
  • 117: UUCP Path Service
  • 119: NNTP
  • 123: NTP
  • 135: Microsoft EPMAP
  • 139: NetBIOS Session Service
  • 143: IMAP
  • 179: BGP
  • 389: LDAP
  • 465: Cisco protocol
  • 512: comsat
  • 513: rlogin
  • 514: Syslog
  • 515: Line Printer Daemon
  • 526: tempo
  • 530: RPC
  • 531: IRC
  • 532: netnews
  • 540: UUCP
  • 556: RFS
  • 563: NNTPS
  • 587: SMTP
  • 601: unknown
  • 636: LDAPS
  • 993: IMAPS
  • 995: POP3S

The associated services are taken from the list of TCP and UDP port numbers on Wikipeda.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...