2014-12-07 252 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服務器對您的客戶感到滿意。

相關問題