我在该链接中看到了答案:
我问自己——如果“端口转发”是通过特定端口将特定包传递到特定计算机,那么为什么不能通过将软件绑定到端口来实现同样的事情?
例如。为什么 Python 中的以下代码:
soc = socket.socket()
soc.bind(('0.0.0.0', 80))
soc.listen(1)
client_soc, address = soc.accept()
这跟对我局域网上的电脑进行 80 端口转发不一样吗?
答案1
将进程绑定到端口是在主机内部发生的事情,以便该进程将接收通过该端口发送到主机的数据。
端口转发与到达主机的路径中的中间节点有关。如果数据包的地址由于 NAPT 而被中间节点更改,则中间节点之外的主机无法直接将数据包发送到执行 NAPT 的节点另一端的主机。中间节点必须知道,任何发往其具有特定端口的地址的流量都必须发送到目标主机。这就是端口转发,它实际上只是在 NAT 表中创建永久条目的一种方法。
答案2
这和在局域网上将我的电脑的端口转发到 80 不一样
它绝对地不是一回事。
您提供的代码会绑定本地计算机上的端口。此操作与将端口上的所有流量转发到特定客户端无关。您可以在网络上的每个客户端上绑定端口,但只能将该端口上的流量转发到网络上的单个客户端。
绑定端口发生在客户端,但当您将端口转发到特定客户端时,您不一定在客户端上绑定该端口。客户端仍必须安装并配置应用程序或服务才能执行此操作。