此时这更像是假设,但假设我有一个用 C 编写的 TCP 服务器运行在 Linux 上。是否可以从单个数据包中获取目的地名称?例如,如果客户端连接并且我的服务器位于 www.example.com。我希望能够从传入的数据包中获取“www.example.com”。
我的最终目标是通过目的地名称分离网络流量,类似于 IIS 在 Windows 上对网站进行绑定(bind)的方式。
如果多个服务运行在同一台机器上并且可以通过同一个端口访问:443,但可以通过域名分隔,那就太好了。如果我可以从数据包中获取目的地名称,我很确定我可以很容易地写出这样的东西。
--编辑 我做了一些研究,但一无所获。我查看了我以前编写的服务器,但我认为我无法使用现有的 Linux 套接字层来完成。我可能不得不降低。
最佳答案
不,因为永远不会发送目标主机名。
发送方使用 DNS 找到它想要与之通信的主机的 IP 地址,然后向该 IP 地址发送数据包。 (更底层,IP 地址被转换为 MAC 地址,这是硬件层使用的)
您的 TCP 套接字层应该允许您查看套接字的源和目标 IP 地址,然后您必须执行反向 DNS 查找以将其转换回主机名。但请记住,一个 IP 地址可以转换为多个主机名...
关于C TCP 套接字 - 获取数据包目标名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26724345/