【问题标题】:How to bind a Python socket to a specific domain?如何将 Python 套接字绑定到特定域?
【发布时间】:2016-08-30 23:02:04
【问题描述】:

我有一个 Heroku 应用程序,它的域为 moarcatz.tk。它使用 Python 的 socket 侦听非 HTTP 请求。
文档指出,如果我将套接字作为 IP 地址绑定到空字符串,它将侦听所有可用接口。我不断收到来自各种 IP 地址的空请求,因此我假设将套接字设置为仅侦听与 moarcatz.tk 的连接将解决问题。但我不知道如何将套接字绑定到域名。
我试过'moarcatz.tk'和gethostbyname('moarcatz.tk'),但都给我这个错误:

OSError: [Errno 99] Cannot assign requested address

这是怎么回事?

【问题讨论】:

  • 您不能将侦听套接字绑定到 DNS 主机名,只能绑定到 IP 地址或接口。
  • @KlausD。那么如何确保我只收到定向到moarcatz.tk 的请求?
  • 严格来说,你不能。像 HTTP 这样的应用程序级协议可以为您提供有关用于获取 IP 地址的域名的一些信息(例如,Host 标头),但这不能保证是正确的,并且可以被欺骗。在套接字/传输级别,不会发送该信息。

标签: python sockets heroku


【解决方案1】:

您无法通过代码进行控制,但可以通过 Heroku 进行控制。

Heroku 有一个非常漂亮的 DNS CNAME 工具,您可以使用它来确保您的应用仅侦听特定域的传入请求 - 它是核心 Heroku 平台的一部分。

你要做的是:

heroku domains:add www.moarcatz.tk

然后,转到moarcatz.tk 的 DNS 提供商并添加 CNAME 记录:

www <heroku-app-name>.herokuapp.com

这将做两件事:

  • 将您的 DNS 指向 Heroku。
  • 让 Heroku 过滤传入流量并允许该特定域使用它。

【讨论】:

    猜你喜欢
    • 2016-10-23
    • 2011-04-29
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多