尝试了解网络我创建了一个tcp连接,例如:
$ nc -p 12345 google.com 80
现在,如果我发送GET请求一切正常,我可以看到Wireshark中的所有数据包。
但如果我想在浏览器中尝试并输入我的浏览器栏
localhost:12345
它拒绝连接,实际上甚至没有发送任何数据包。 (TCP连接仍在运行)
那么为什么我可以通过shell而不是通过浏览器进行通信,我在这里缺少什么?我的浏览器不应该只将GET请求转发到端口12345吗?
答案 0 :(得分:1)
您混淆了源端口和目标端口。
$ 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比以前更复杂,并且指定单个端口来加载页面没有实际意义,因为访问页面时会触发许多同时连接。