基于 DDNS 的 Python 套接字

问题描述

如何在 python 中使用套接字客户端托管并连接到套接字服务器?

没有进一步的问题或细节,因为我不知道。

解决方法

不是以 DHCP 或 DDNS 专家的身份发言,而是以基本熟悉的人的身份发言-

让我先描述一下您的问题是什么。你有一台服务器……它有一个特定的 IP 地址。它有一个域名 - 比如说 www.myDomain.com。 DNS 提供该域名到关联 IP 地址的映射。这样,当您在浏览器中键入 www.myDomain.com 时...会向您的本地 DNS 服务器发送一条消息,询问“此名称 www.myDomain.com 实际上映射到哪个 IP”?解决后,您的网络请求将发送到位于该 IP 的实际服务器。

使用 DHCP...您的服务器 IP 不是静态的。它在变化——它经常变化。您的 IP 有一个特定的租用窗口,之后它就会过期。 DHCP 背后的理念是动态分配 IP 地址 - 它允许设备无需手动配置即可连接/断开网络,并且还通过重用 IP 地址来节省 IP 地址。 但由于您的服务器 IP 经常更改,这意味着需要使用从您的域名 - www.myDomain.com - 到该新 IP 地址的新映射来更新 DNS 服务器。

您必须更新 DNS 服务器,以便客户端知道要将请求发送到哪个 IP 地址。这就是套接字部分 - 客户端和服务器在它们之间保持网络连接。套接字是该网络连接的应用程序级接口。套接字接口需要正确的 IP 地址。与DNS服务器对接,解析域名IP地址。

这就是 DDNS。 DDNS 是 DNS 的扩展以适应 DHCP 协议。旧的 DNS 系统不足以处理来自 DHCP 的这些频繁的动态 IP 更新。

因此,您可以先阅读什么是 DDNS。维基百科文章是一个很好的起点。如果你真的迷路了,那就先了解一下什么是DHCP和DNS。

每次您的 IP 由于 DHCP 更新而发生变化时,您都需要向您的网络 DDNS 服务器发送更新请求。而且这种情况经常发生。因此,您需要检测 IP 何时发生变化。每次发生这种情况时,您可能都可以设置和触发一些操作系统事件。您可以编写一个程序来轮询——假设一个后台进程每秒唤醒一次并检查 IP 地址是否已更改。因此,您需要向操作系统查询您的 IP 地址,并将其与之前的地址进行比较。

一旦您知道 IP 已更改……您可以向 DDNS 发送消息以进行更新。有 2 种 DDNS - 标准和专有系统,您需要弄清楚您的 DDNS 服务器期望哪种类型。很可能是标准,但谁知道呢。

所以他们有发送这些自动 IP 更新的软件。您可以考虑使用一些可以完成此操作的软件,而不是自己编写。

要使用 Python 发送更新消息...请记住,DDNS 需要特定的消息格式来进行更新。 您可以使用 Python 的 dns 包来传达这些更新。 这里有一个关于 Python 和 DDNS 的相关线程,您应该可以从中获得概述:Dynamic DNS updates using Python's dns.update returning rcode REFUSED

在该线程中,他们正在设置要发送到 DDNS 的更新消息。该消息具有特定格式,因此这需要您阅读有关 DDNS 的内容。

这超出了我的知识范围 - 但根据您的应用程序,您可能能够从服务器向您的客户端发送消息,告诉他们与服务器的新 IP 建立新连接。暂时绕过DNS。这可能会加速客户端获取新 IP 的过程,因为有时 DDNS 需要一段时间才能更新。这只是我的猜测 - 你必须努力工作并让它运行良好。如果它是一个网络应用程序......这将不起作用,浏览器通过 DNS,你将不得不依赖 DNS 更新。但是如果它是一个 IP 被硬编码的应用程序,比如一个带有专用服务器的移动应用程序或其他东西......你可以尝试一下。老实说,我不确定这是否可行,它在我的域之外,但这只是一个想法 - 看看是否可以为您的用例绕过 DNS。

对于严肃的应用程序来说,更好的选择通常是从 ISP 购买静态 IP。那么你就不必为这些而烦恼了。您的服务器 IP 不会改变。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...