pyxmpp2 连接 openfire 无法解析 NXDOMAIN

2 投票
2 回答
757 浏览
提问于 2025-04-17 19:57

我在我的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

我是不是漏掉了什么配置?

2 个回答

0

可能是正在使用ipv6,你可以强制使用ipv4,方法是设置 u"ipv4": True,并指定服务器 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

1

看起来你的域名没有DNS SRV记录,所以pyxmpp2无法找到它们。你可以查看一下这个链接,了解如何创建这些记录。

简单来说,DNS SRV记录的格式是这样的:

_服务名._协议名.域名 TTL 类别 SRV 优先级 权重 端口 目标

这可能看起来像下面这个例子:

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

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

撰写回答