为什么浏览器阻止某些端口?

时间:2010-11-30 11:51:57

标签: javascript browser websocket

我正在使用websockets,看来,我测试过的所有具有本机websocket支持的浏览器(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搜索没有找到任何有用的内容。

为什么这些端口首先被阻止?

提前致谢!

3 个答案:

答案 0 :(得分:25)

好的,我找到了答案。有时你只是看不到森林里的树木。

首先,处理被阻塞端口的情况是微不足道的。一个简单的try/catch可以解决问题。我只是对Chrome显示异常的方式感到困惑,并且没有立即认出它(我通常使用Firefox)。

其次,WebSockets API Specification明确指出

  

如果port是用户代理配置为阻止访问的端口,则抛出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:手指
  • 87:link
  • 95:supdup
  • 101:网卡主机名
  • 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:思科协议
  • 512:comsat
  • 513:rlogin
  • 514:Syslog
  • 515:行式打印机守护程序
  • 526:tempo
  • 530:RPC
  • 531:IRC
  • 532:netnews
  • 540:UUCP
  • 556:RFS
  • 563:NNTPS
  • 587:SMTP
  • 601:未知
  • 636:LDAPS
  • 993:IMAPS
  • 995:POP3S

相关服务取自Wikipeda上的TCP和UDP端口号列表。

答案 1 :(得分:4)

要在旧问题中添加新列表:

https://chromium.googlesource.com/chromium/src.git/+/refs/heads/master/net/base/port_util.cc

// The general list of blocked ports. Will be blocked unless a specific
// protocol overrides it. (Ex: ftp can use ports 20 and 21)
const int kRestrictedPorts[] = {
    1,       // tcpmux
    7,       // echo
    9,       // discard
    11,      // systat
    13,      // daytime
    15,      // netstat
    17,      // qotd
    19,      // chargen
    20,      // ftp data
    21,      // ftp access
    22,      // ssh
    23,      // telnet
    25,      // smtp
    37,      // time
    42,      // name
    43,      // nicname
    53,      // domain
    77,      // priv-rjs
    79,      // finger
    87,      // ttylink
    95,      // supdup
    101,     // hostriame
    102,     // iso-tsap
    103,     // gppitnp
    104,     // acr-nema
    109,     // pop2
    110,     // pop3
    111,     // sunrpc
    113,     // auth
    115,     // sftp
    117,     // uucp-path
    119,     // nntp
    123,     // NTP
    135,     // loc-srv /epmap
    139,     // netbios
    143,     // imap2
    179,     // BGP
    389,     // ldap
    427,     // SLP (Also used by Apple Filing Protocol)
    465,     // smtp+ssl
    512,     // print / exec
    513,     // login
    514,     // shell
    515,     // printer
    526,     // tempo
    530,     // courier
    531,     // chat
    532,     // netnews
    540,     // uucp
    548,     // AFP (Apple Filing Protocol)
    556,     // remotefs
    563,     // nntp+ssl
    587,     // smtp (rfc6409)
    601,     // syslog-conn (rfc3195)
    636,     // ldap+ssl
    993,     // ldap+ssl
    995,     // pop3+ssl
    2049,    // nfs
    3659,    // apple-sasl / PasswordServer
    4045,    // lockd
    6000,    // X11
    6665,    // Alternate IRC [Apple addition]
    6666,    // Alternate IRC [Apple addition]
    6667,    // Standard IRC [Apple addition]
    6668,    // Alternate IRC [Apple addition]
    6669,    // Alternate IRC [Apple addition]
    6697,    // IRC + TLS
};

答案 2 :(得分:3)