我应该在 NICK 之前使用 PASS,USER 吗?
Posted
技术标签:
【中文标题】我应该在 NICK 之前使用 PASS,USER 吗?【英文标题】:Should I use PASS before NICK, USER? 【发布时间】:2014-12-30 12:44:28 【问题描述】:我正在玩 IRC 机器人(在 python 中),并且一直在查看许多有用的示例。
有一件事我无法弄清楚... 我应该在NICK
、USER
之前使用PASS
吗?
在 RFC 1459 以及多个 RFC 2810..13 中,建议在 NICK
、USER
之前使用 PASS
。然而,似乎没有人遵循这种做法。没有PASS
,机器人似乎也能正常工作。
什么时候应该使用PASS
,为什么?
【问题讨论】:
【参考方案1】:PASS 用于向 IRC 服务器提供连接密码,尽管大多数公共 IRC 服务器通常不设置连接密码。只有在需要密码才能连接到服务器时才需要 PASS。 (请注意连接身份验证和对网络服务(例如 NickServ)进行身份验证之间的区别)。
NICK 和 USER 足以注册到 IRC 服务器的新连接。但是,由于 PASS 是可选的,因此必须在连接注册完成之前指定。这意味着 PASS 不能是 NICK、USER 和 PASS 三人组发送的最后一个。
【讨论】:
【参考方案2】:PASS 在连接完全“注册”到服务器的那一刻进行评估 - 意思是,服务器拥有所有必需的信息来评估是否应允许连接,如果允许,则引入客户端连接到网络。 (这是在任何注册 IRC 服务(如 NickServ)之前,并且与任何注册分开)。直到服务器看到 SERVER 或 两者 以及 NICK 和 USER 命令,PASS 才被接受,
PASS 实际上可能被发送多次,通常只受注册超时的影响,但根据 RFC,只有在完成注册之前看到的最后一次 PASS 才会被评估 - 多次发送 PASS 只会覆盖之前的值。
如果连接来自服务器,则需要 PASS,并且必须在 SERVER 命令之前发送。
普通用户通常不需要发送密码来连接 - 通常只有以某种方式获得特权的连接才需要 - 例如具有更高连接限制的用户、洪水控制豁免、具有掩码主机名的 IRC 操作员在服务器配置中,较大的发送缓冲区、较长的 ping 超时或允许连接,尽管地理限制可能已定义密码。
一些网络选择使用 PASS 来向 NickServ 等 IRC 服务进行身份验证,但这已变得不常见,因为这种用法与 PASS 的标准用法相冲突,并且因为对服务的身份验证通常需要两个参数(帐户名和密码)并且 PASS 被定义为取一个。
如果您希望在连接时对服务进行身份验证,大多数具有服务的网络都会专门为此目的对 IRC 协议实施SASL Authentication 扩展。
【讨论】:
以上是关于我应该在 NICK 之前使用 PASS,USER 吗?的主要内容,如果未能解决你的问题,请参考以下文章
freenode IRC 如何在其加入地址中分配用户字符串。即 nick!user@host
Winsock - 为啥 ZNC(和 IRC 保镖)不接受我的 winsock 连接?
MQTT入门2 -- “Error: Invalid password hash for user nick.”和“Connection Refused: not authorised.”
C++ 程序在执行 con = driver->connect(host, user, pass); 时崩溃且没有错误消息