0

我正在编写一个 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
4

1 回答 1

0

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

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

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

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

于 2013-11-02T10:18:42.257 回答