Firefox “127.0.0.1:65535”是“dev/null”的网络等价物吗?

Firefox “127.0.0.1:65535”是“dev/null”的网络等价物吗?,firefox,proxy,network-programming,firefox-addon-webextensions,pac,Firefox,Proxy,Network Programming,Firefox Addon Webextensions,Pac,在MDN中,我看到他们使用127.0.0.1:65535作为无效url (): 65535端口有什么特别的吗?假设没有进程会侦听该端口是否安全 在的文档中,我没有看到阻止请求的直接方法。例如,有DIRECT、PROXY、SOCKS,但没有REJECT或DENY。我假设PROXY 127.0.0.1:65535是拒绝请求的官方方式 假设向127.0.0.1:65535发送请求将拒绝它们,安全吗 假设将请求发送到127.0.0.1:65535将拒绝它们是否安全 不,这不安全 这只是本地机器上的最后一

在MDN中,我看到他们使用
127.0.0.1:65535
作为无效url ():

65535端口有什么特别的吗?假设没有进程会侦听该端口是否安全

在的文档中,我没有看到阻止请求的直接方法。例如,有
DIRECT
PROXY
SOCKS
,但没有
REJECT
DENY
。我假设
PROXY 127.0.0.1:65535
是拒绝请求的官方方式

假设向
127.0.0.1:65535
发送请求将拒绝它们,安全吗

假设将请求发送到127.0.0.1:65535将拒绝它们是否安全

不,这不安全

这只是本地机器上的最后一个端口。我完全能够在没有任何特权的情况下打开它并向它发送数据

他们只是将其用作一个有效地址,但不太可能使用的端口。不是最好的解决方案,但可能足够好,例如代码

没有特殊规定,65535是代理的有效端口。如果您恰好在那里运行了一个有效的代理,示例将无法阻止。

通常“9”被用作“放弃服务”的默认端口。65535没有什么特别之处,只是可能的最大端口号。我猜他们使用它是因为他们相信没有人会听这个端口


然而,这种方法并不安全,因为1)任何人都可以编写服务器套接字,监听端口65535;2)端口号可以随机分配给客户端作为临时端口。

除了其他答案之外,丢弃协议(端口9)最接近于
/dev/null
。引自:

Discard协议是Unix文件系统节点的TCP/UDP等效协议
/dev/null
。这样的服务保证接收发送给它的内容,并可用于调试TCP和/或UDP代码,这些代码需要保证接收发送的有效负载

在各种路由器上,丢弃协议的TCP或UDP端口9(或转发ICMP数据报的回声协议的端口7)默认情况下也用作代理,将LAN唤醒(WOL)魔术数据包从Internet中继到本地网络上的主机,以便远程唤醒它们(这些主机还必须配置其网络适配器以接受WOL数据报,路由器必须启用此代理设置,并且可能还配置其嵌入式防火墙中的转发规则以打开Internet端的这些端口)

另外,通过代理API阻止请求也不是典型的用法。相反,更适合阻止请求。下面将讨论如何阻止请求


我认为这解释了为什么事实标准中没有明确支持拒绝请求,以及为什么使用了将流量重定向到未使用的端口或域的变通方法。

是的,我在Chrome API中看到了一个类似的例子,他们将所有请求重定向到“黑洞”.然而,我仍然感到惊讶的是,没有直接的方法来表达您的意图。当您对示例代码说“足够好”时,您知道是否有方法使其更健壮(对于生产代码)
proxy
API可能不是有选择地阻止请求的正确位置。
webRequest
API是它的正确工具。啊,我想你是对的。是的,我记得甚至还有一个相关的pull请求,它认为阻止请求是一种非典型用法()。请注意,拒绝连接(正如示例所依赖的)和静默接受任何输入(实际上是
/dev/null
等效项)之间存在差异。它可能会从Chrome中引发不同的响应/错误,当然它会有效地阻止它。
const allow = "DIRECT";
const deny = "PROXY 127.0.0.1:65535";
...
function FindProxyForURL(url, host) {
  if (blockedHosts.indexOf(host) != -1) {
    browser.runtime.sendMessage(`Proxy-blocker: blocked ${url}`);
    return deny;
  }
  return allow;
}