【问题标题】:Get subdomain from TCP socket从 TCP 套接字获取子域
【发布时间】:2017-09-29 14:03:26
【问题描述】:

我正在编写一个服务器应用程序,它接受来自不同程序/协议的 TCP 连接,但我需要将其他信息传递给我的服务器。我正在考虑通过正在使用的子域传递这些信息。换句话说,当连接到我的服务器时,使用somedata.example.com 之类的地址,其中somedata 将是我需要的额外信息,我的DNS 将*.example.com 指向我的服务器。是否可以获取客户端用于连接到我的服务器的域/子域?

欢迎使用代码示例,在 Go 中会更好。

谢谢。

【问题讨论】:

  • 主机名和子域在 http 协议中进行通信。它们不一定在任意 tcp 流中进行通信。
  • 您具体使用什么协议?你在用tls吗? SNI 握手可能包含您需要的信息。
  • 我的服务器将在 TCP 套接字级别工作。也许您可以详细说明如何从 SNI 握手中获取此数据,以供其他可能感兴趣且没有我所做限制的人使用?

标签: sockets tcp server dns subdomain


【解决方案1】:

TCP 连接在概念上只是每个方向的字节流。没有单一的方式可以传达带有子域的主机名。如果需要,大多数协议都有自己的通信方式。例子:

  • http 请求有一个HOST 标头。
  • 启动 tls 连接时,握手通常包含所需的主机名。

如果您使用某些标准协议,则应使用其内置的元数据工具。

如果您正在构建自己的自定义二进制协议(如果可以避免的话,我不会这样做),您可以考虑以某种格式添加一些标头信息。也许length|desired-service-name|other-data 的标准化标题就足够了。如果客户端在新连接开始时发送类似的内容,服务器可以读取它,并适当地分派连接。

【讨论】:

  • 谢谢,我担心会是这样。
猜你喜欢
  • 2019-04-02
  • 2019-08-20
  • 2012-09-10
  • 1970-01-01
  • 2014-09-15
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多