pyxmpp2 连接到 openfire 无法解析 NXDOMAIN

Posted

技术标签:

【中文标题】pyxmpp2 连接到 openfire 无法解析 NXDOMAIN【英文标题】:pyxmpp2 connect to openfire cannot resolve NXDOMAIN 【发布时间】:2013-03-22 02:41:49 【问题描述】:

我在我的 Ubuntu 机器上安装了 pyxmpp2 https://github.com/Jajcus/pyxmpp2。我还为它安装了 Openfire 3.8.1。我想使用 pyxmpp2 在同一台机器上连接到我的 Openfire 服务器。

在我的 Openfire 控制面板的服务器 -> 服务器管理器 -> 服务器信息中,面板中服务器属性中显示的服务器名称为 mymachine,环境部分中显示的主机名称为 MyMachine。

我尝试了以下代码:

import logging
from pyxmpp2.jid import JID
from pyxmpp2.client import Client
logging.basicConfig()
client = Client(JID("admin@mymachine"),[])
client.connect()

并收到以下消息:

警告:pyxmpp2.resolver:无法解析“_xmpp-client._tcp.mymachine”:NXDOMAIN

我错过了配置吗?

【问题讨论】:

【参考方案1】:

您的域似乎没有 DNS SRV 记录,因此 pyxmpp2 无法解析它们。查看http://wiki.xmpp.org/web/SRV_Records 了解如何创建它们。

基本上,DNS SRV 记录的格式为

_service._proto.name TTL 类 SRV 优先权重端口目标

可能看起来像这个例子

_xmpp-client._tcp.example.net. 86400 IN SRV 5 0 5222 example.net.

也许 pyxmpp2 还提供了一种直接指定用于 XMPP 服务的主机的方法。这将避免 DNS SRV 查找。

【讨论】:

XMPP 协议不需要 DNS SRV 记录,但我们鼓励使用。您的 JID“admin@mymachine”(因此,mymachine)中的服务器部分必须为 python 库解析。尝试“nslookup mymachine”或“dig mymachine”进行故障排除。使用与代码中完全相同的服务器名称。 谢谢。我已阅读链接http://wiki.xmpp.org/web/SRV_Records,但我不知道如何创建 SRV 记录。你能给我更详细的指导吗?我需要安装“绑定”吗?【参考方案2】:

可能正在使用 ipv6,您可以使用 u"ipv4": True 强制 ipv4 并指定服务器 u"server": "chat.facebook.com"

handler = MyHandler(JID(target_jid), message)
settings = XMPPSettings(
                            u"ipv4": True,
                            u"server": "chat.facebook.com",
                            u"password": your_password,
                            u"starttls": True,
                            u"tls_verify_peer": False,
                        )
client = Client(JID(your_jid), [handler], settings)
client.connect()
client.run()

完整代码位于pyxmpp2示例文件夹send_message_client.py

【讨论】:

以上是关于pyxmpp2 连接到 openfire 无法解析 NXDOMAIN的主要内容,如果未能解决你的问题,请参考以下文章

XMPPFramework - 无法连接到 Openfire 服务器

无法使用 HTTP 绑定连接到 XMPP 服务器(openfire)

为啥我无法从另一台计算机连接到 openfire 服务器?

Strophe.js 无法连接到 openfire

无法连接到本地 Openfire 服务器(使用 smack api)

aSmack 4.0.* XMPPTCPConnection 无法连接到 OpenFire 和 Ejabbered (SmackException$NoResponseException)