python irc客户端没有识别响应

Posted

技术标签:

【中文标题】python irc客户端没有识别响应【英文标题】:python irc client no ident response 【发布时间】:2013-11-02 01:23:35 【问题描述】:

我正在编写一个 IRC 聊天客户端,因为我的 ISP 不允许正常的 IRC 程序。所以我正在使用 SSL 制作一个。无论如何,我运行了我的 IRC 聊天客户端,我可以很好地听我只是无法识别自己。我总是在聊天开始后收到这个。

* 没有 Ident 响应

我看到的所有内容都让我在端口 113 上监听并做出响应,因此我编写了一个 TCP 套接字来监听并打印发送的内容,以为我遵循了其他建议。但是,我从来没有得到任何响应,我在 113 上远程登录到服务器套接字,并且能够正常连接和通信。

我认为 IRC 没有在 113 上发回其验证,或者我发送的信息有问题。如何识别自己或至少响应回复以识别自己并聊天

这是我的客户:

import socket, string, re, time , ssl, urllib

network = 'irc.freenode.net'
nick    = 'testr'
chan    = 'ubuntu'
port    = 7000 #6697

socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

def main(network, nick, port):
        socket.connect((network,port))
        irc = ssl.wrap_socket(socket)
        irc.send('NICK %s\r\n' % nick)
        print irc.recv(4096)
        irc.send('USER %s %s %s :TEST\r\n' % (nick,nick,nick))
        print irc.recv(4096)
        irc.send("JOIN #%s\r\n" % chan)
        print irc.recv(4096)

        print "STARTING CHAT!!"

        while True:
                data = irc.recv(4096)
                print data
                irc.send("TEST")

                if data.find('PING') != -1:
                        print "PING RECEIVED!"
                        print "SENDING PONG!"
                        irc.send('PONG '+data.split()[1]+'\r\n')

    if __name__=='__main__':
        main(network, nick, port)

还有我的 SERVER 用于测试响应:

#!/usr/bin/python           

import socket               
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

host = 'localhost' 
port = 113                 
s.bind((host, port))        
s.listen(5)                 

while True:
   c, addr = s.accept()     
   data = c.recv(1024)
   print data
   #c.close()                # Close the connection

【问题讨论】:

FWIW: google "irc client ssl" 找到许多已经支持 SSL。 【参考方案1】:

'ident' 的意思不是你想的那样。它实际上是一项必须满足特定协议的服务。 (然而,大多数 IRC 服务器对此并不严格..)

您可能需要设置一个从您的外部地址转发到您的假身份服务器的 NAT 端口来支持此功能。世界上 99% 的人都将设置一个外部地址,您可以远程登录到端口 113,除非您的防火墙配置正确,否则它不会连接到任何东西。

但是,在大多数情况下,您可以忽略 ident - 反正它基本上就是垃圾。远程连接信任您确认使用本地主机端口的用户的身份。这至少可以说是不可信的。出于这个原因,大多数 ircd 可能会出于历史原因对其进行检查,但几乎没有人会因为您拥有虚假数据而对您进行处罚。

查看http://en.wikipedia.org/wiki/Ident_protocol了解更多信息。

【讨论】:

感谢您的回复。我很好奇,这就是我不能在聊天中说话的原因吗?我有一个替代代码,它允许我 irc.send("STRING") 但从未将数据发送到他的服务器或至少任何人都可以看到的任何东西。

以上是关于python irc客户端没有识别响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 python irc 库定期执行任务

IRC Python Bot:最佳方式 [关闭]

IRC 客户端 C# PING 请求

与 irc 服务器的连接阶段

IRC 协议的 JOIN 命令

iOS 中的 IRC /TOPIC 命令修剪问题