C TCP 套接字 - 获取数据包目标名称

标签 c linux sockets networking tcp

此时这更像是假设,但假设我有一个用 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/

相关文章:

Python 运行时 : recompiling and reusing C library

java - 返回之前的搜索结果

c - C中的填充矩阵

linux - 收紧 shell 以防叉弹

c - 使用 setsockopt;当套接字从另一端关闭时,read 返回 0 而不是 -1

c++ - C语言中函数中的switch指针

linux - 有没有办法在 Linux + Apache 上执行 .exe CGI 应用程序

c++ - octave 独立,示例报告对 `octave::feval 错误的 undefined reference

Java:如何让UDP套接字程序以阻塞I/O方式接收和发送?

linux - getsockname() 没有 bind()