使浏览器向特定端口发送请求
Making browser send requests to specific port
为了学习网络,我创建了一个 tcp 连接,例如:
$ nc -p 12345 google.com 80
现在,如果我发送 GET 请求,一切都很好,我可以在 Wireshark 中看到所有数据包。
但是如果我想在我的浏览器中尝试它并在我的浏览器栏中输入
localhost:12345
它拒绝连接,事实上什至没有发送任何数据包。 (TCP 连接还在)
那为什么我可以通过 shell 而不是通过浏览器进行通信,我在这里缺少什么?我的浏览器不应该只将 GET 请求转发到端口 12345 吗?
您混淆了源端口和目标端口。
$ nc -p 12345 google.com 80
此命令告诉 netcat 从您的源端口 12345 在其远程端口 80 上打开与服务器 google.com 的连接。
相比之下,localhost:12345 将远程端口指定为 12345,源端口可以是您的操作系统为请求分配的任何端口。这类似于您第一个示例中的 google.com:80。
源端口不响应新连接请求,因为没有服务侦听对发送给它的应答请求。
找到有关源端口与目标端口的进一步阅读
编辑 2:如果您只想发出 HTTP 请求并强制使用本地端口,请查看 cURL。以下将做你想做的。
$ curl --local-port 12345 google.com:80
您不能让现代浏览器使用特定端口,因为有很多因素,包括并行请求和管道请求。基本上,每次加载网页时,可能会在数十个端口上同时打开数十个请求。 Web 比以前更复杂,指定单个端口来加载页面没有实际意义,因为访问页面时会触发许多同时连接。
为了学习网络,我创建了一个 tcp 连接,例如:
$ nc -p 12345 google.com 80
现在,如果我发送 GET 请求,一切都很好,我可以在 Wireshark 中看到所有数据包。
但是如果我想在我的浏览器中尝试它并在我的浏览器栏中输入
localhost:12345
它拒绝连接,事实上什至没有发送任何数据包。 (TCP 连接还在)
那为什么我可以通过 shell 而不是通过浏览器进行通信,我在这里缺少什么?我的浏览器不应该只将 GET 请求转发到端口 12345 吗?
您混淆了源端口和目标端口。
$ nc -p 12345 google.com 80
此命令告诉 netcat 从您的源端口 12345 在其远程端口 80 上打开与服务器 google.com 的连接。
相比之下,localhost:12345 将远程端口指定为 12345,源端口可以是您的操作系统为请求分配的任何端口。这类似于您第一个示例中的 google.com:80。
源端口不响应新连接请求,因为没有服务侦听对发送给它的应答请求。
找到有关源端口与目标端口的进一步阅读编辑 2:如果您只想发出 HTTP 请求并强制使用本地端口,请查看 cURL。以下将做你想做的。
$ curl --local-port 12345 google.com:80
您不能让现代浏览器使用特定端口,因为有很多因素,包括并行请求和管道请求。基本上,每次加载网页时,可能会在数十个端口上同时打开数十个请求。 Web 比以前更复杂,指定单个端口来加载页面没有实际意义,因为访问页面时会触发许多同时连接。