2013-11-02 1 views
0

ISP에서 일반 IRC 프로그램을 허용하지 않기 때문에 IRC 채팅 클라이언트를 작성하고 있습니다. 그래서 나는 SSL을 사용하여 하나 만들고있다. 어쨌든, 나는 IRC 채팅 클라이언트를 실행하고 잘 알 수있다. 나는 자신을 식별 할 수 없다. 나는 채팅 시작 후에 항상 이것을받습니다. 나는 나를 포트 113에서 수신 및 응답이 살펴 보았다python irc client no ident 응답

* 없음 행선지 응답

모든 그래서 내가 다른의 recomendations에 따라 생각 듣고 보내 무엇을 인쇄 할 TCP 소켓을 썼다. 그러나, 나는 결코 어떤 응답도 얻지 않으며 113에 서버 소켓에 telneted 연결하고 잘 교통 할 수 있었다.

나는 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 
+1

FWIW : google "irc client ssl"은 이미 SSL을 지원하는 많은 것을 찾을 수 있습니다. 답장을 보내 주신 덕분에 –

답변

0

'답하라'는 네가 생각하는 것 말고 다른 것. 실제로는 특정 프로토콜을 충족해야하는 서비스입니다. (그러나 대부분의 IRC 서버는 엄격하지 않습니다.)

외부 주소에서 가짜 ident 서버로 NAT 포트를 설정해야합니다. 99 %의 세계가 113 번 포트로 텔넷 할 수있는 외부 주소로 설정되며 방화벽이 올바르게 구성되어 있지 않으면 아무 것도 연결하지 않습니다.

그러나 대부분의 경우 식별 정보를 무시할 수 있습니다. 어쨌든 기본적으로는 가비지입니다. 원격 연결은 로컬 호스트 포트를 사용하는 사용자의 신원을 확인하는 것을 신뢰합니다.이 포트는 가장 신뢰할 수있는 포트입니다. 이런 이유 때문에 대부분의 ircd는 역사적인 이유로 그 사실을 확인할 수 있지만 위조 된 데이터로 인한 불이익은 거의 없습니다.

자세한 내용은 http://en.wikipedia.org/wiki/Ident_protocol을 확인하십시오.

+0

. 나는 호기심이 많았는데, 이것이 내가 채팅으로 말할 수없는 이유입니까? irc.send ("STRING")에 허용 된 코드의 대안이 있었지만 서버에 데이터를 보내지 않았거나 누군가가 볼 수있는 것을 atleast로 보내지 않았습니다. – ApertureSecurity