使浏览器向特定端口发送请求

时间:2017-05-19 01:39:12

标签: browser tcp netcat

尝试了解网络我创建了一个tcp连接,例如:

$ nc -p 12345 google.com 80

现在,如果我发送GET请求一切正常,我可以看到Wireshark中的所有数据包。

但如果我想在浏览器中尝试并输入我的浏览器栏

localhost:12345

它拒绝连接,实际上甚至没有发送任何数据包。 (TCP连接仍在运行)

那么为什么我可以通过shell而不是通过浏览器进行通信,我在这里缺少什么?我的浏览器不应该只将GET请求转发到端口12345吗?

1 个答案:

答案 0 :(得分:1)

您混淆了源端口和目标端口。

$ nc -p 12345 google.com 80

此命令告诉netcat在源端口12345的远程端口80上打开与服务器google.com的连接。

相比之下,localhost:12345指定远程端口为12345,源端口可以是您的操作系统为请求分配的任何内容。这与第一个例子中的google.com:80类似。

源端口不响应对新连接的请求,因为没有服务侦听发送给它的应答请求。

编辑:可以在https://superuser.com/questions/704742/source-address-source-port-vs-destination-address-destination-port

找到关于源端口与目标端口的进一步阅读

编辑2:如果您只想发出HTTP请求并强制使用本地端口,请查看cURL。以下将做你想要的。

$ curl --local-port 12345 google.com:80

由于很多因素(包括并行请求和流水线请求),您无法使现代浏览器使用特定端口。基本上,每次加载网页时,都会有数十个请求同时在几十个端口上打开。 Web比以前更复杂,并且指定单个端口来加载页面没有实际意义,因为访问页面时会触发许多同时连接。