0

ISP が通常の IRC プログラムを許可していないため、IRC チャット クライアントを作成しています。そのため、SSLを使用して作成しています。とにかく、私は IRC チャット クライアントを実行しましたが、問題なく聞くことができます。チャットの開始後に必ずこれを受け取ります。

* ID 応答なし

私が見たものはすべて、ポート113でリッスンして応答するようになっているので、他の推奨事項に従うと考えて、送信されたものをリッスンして印刷するTCPソケットを作成しました。しかし、何の応答も得られず、113 のサーバー ソケットに telnet で接続したところ、問題なく接続して通信できました。

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)

そして、応答をテストするための私のサーバー:

#!/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 サーバーは厳密ではありません..)

おそらく、これをサポートするために、外部アドレスから偽の ident サーバーへの NAT ポート転送をセットアップする必要があります。世界の 99% は、ポート 113 に telnet できる外部アドレスでセットアップされ、ファイアウォールが正しく構成されていない限り、何にも接続されません。

ただし、ほとんどの場合、ident は無視できます。とにかく基本的にゴミです。リモート接続は、ローカル ホスト ポートを使用しているユーザーの身元を確認するためにあなたを信頼しています..これは、控えめに言っても信頼できません。このため、ほとんどの ircd は歴史的な理由でそれをチェックするかもしれませんが、偽のデータを持っていることで罰せられることはほとんどありません。

詳細については、 http://en.wikipedia.org/wiki/Ident_protocolをご覧ください。

于 2013-11-02T10:18:42.257 に答える