2014-12-07 259 views
1

通常我会用扭曲的库尝试类似这样的操作,但这不适用于python 3 - 所以我尝试使用套接字库。代码确实建立了连接,但服务器很快响应“无身份响应”。我没有太多的网络编程经验,所以如果有人能指出我在这里所犯的错误,我将不胜感激。我也很清楚,有些函数/其他代码没有被使用,或者我使用的不一致。我只是认为我会粘贴我的代码的全部情况下,以防其相关。连接到IRC服务器时出现“NO IDENT RESPONSE”错误

import socket 

server = "irc.freenode.net" 
channel = "put channel here" 
nickname = "put nickname here" 


def encode(text): 
    return text.encode("ascii") 


def ping(): 
    irc_socket.send(encode("PONG :pingis\n")) 


def send_message(chan, msg): 
    irc_socket.send(encode("PRIVMSG " + chan + " :" + msg + "\n")) 


def join_channel(chan): 
    irc_socket.send(encode("JOIN " + chan + "\n")) 

def login(username='user', realname='Pythonist', hostname='Helena', servername='Server'): 
    irc_socket.send(encode("USER %s %s %s %s" % (username, hostname, servername, realname))) 
    irc_socket.send(encode("NICK " + nickname)) 


irc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
irc_socket.connect((server, 6667)) 
login() 
join_channel(channel) 

while True: 
    buffer = irc_socket.recv(1024) 
    msg = str.split(str(buffer)) 
    if msg[0] == "PING": 
     irc_socket.send("PONG %s" % msg[1]) 
    print(msg) 

该代码最初来自:http://wiki.shellium.org/w/Writing_an_IRC_bot_in_Python和我做了一些小改动。

+1

“无身份响应”并不是一个真正的错误。即使您使用桌面客户​​端,您通常也会看到它。 – icktoofay 2014-12-07 23:04:09

+0

你会有复制粘贴:) – simopopov 2014-12-07 23:04:56

回答

3

Teensy微小的问题,造成所有的麻烦:你错过了login换行符。 "USER %s %s %s %s"应该是"USER %s %s %s %s\n""NICK " + nickname应该是"NICK " + nickname + "\n"。服务器查找您的身份并找不到它,然后下一步是注册,但您永远不会发送完整的一行,因此它一直在等待...并等待...

3

Ident是没有人使用了二十年左右的UNIX服务。

在终端应用程序中对终端服务器进行远程服务器连接时,它被用于识别远程用户。 Ident对于现代互联网来说并不安全,所以没有人再使用它了。

所以你已经击中了过去的幽灵。另外,正如上面的答案所述,如果您发送正确的NICK命令,IRC服务器对您的客户感到满意。

相关问题