From 514b78e31ac46d4cc403d16ad5dee9e15a54073b Mon Sep 17 00:00:00 2001 From: yvesf Date: Mon, 6 Jul 2009 19:36:34 +0000 Subject: ifooba git-svn-id: http://xapek.org/svn/common/omegle@1192 d0e8fea9-7529-0410-93fb-d39fd5b9c1dd --- omegle_icq.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++------- slides/slides.tex | 29 ++++++++++--------- 2 files changed, 91 insertions(+), 25 deletions(-) diff --git a/omegle_icq.py b/omegle_icq.py index 82c8c04..4c4c257 100644 --- a/omegle_icq.py +++ b/omegle_icq.py @@ -11,7 +11,7 @@ from omegle import OmegleChat randoms = [['370496181', 'megahal123'], ['446323989','gagaga']] -i=0 +i=1 uin = randoms[i][0] password = randoms[i][1] @@ -21,24 +21,64 @@ class OmegleICQChat(OmegleChat): self.icqconn = icqconn OmegleChat.__init__(self,name="("+user.name+")") def on_message(self,message): - print "%s: got message %s" % (self.user.name,message) + print "%s: omegle got message %s" % (self.user.name,message) self.send_icqconn( message ) def send_icqconn(self,message): - print "%s: send %s" % (self.user.name,message) - reactor.callFromThread(self.icqconn.sendMessage, self.user.name, str(message) ) + print "%s: send to icq %s" % (self.user.name,message) + reactor.callFromThread(self.icqconn.sendSNAC, 0x04, 0x14, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'+chr(len(self.user.name))+self.user.name+"\x00\x00") + reactor.callFromThread(self.icqconn.sendMessage, self.user.name, message.decode('utf8').encode('iso-8859-1') ) + + def on_typing(self): + """ + 0x02 begin + 0x01 idle + 0x00 finish + """ + reactor.callFromThread(self.icqconn.sendSNAC, 0x04, 0x14, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'+chr(len(self.user.name))+self.user.name+"\x00\x02") + print "begin typing" + + def on_stopped_typing(self): + reactor.callFromThread(self.icqconn.sendSNAC, 0x04, 0x14, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'+chr(len(self.user.name))+self.user.name+"\x00\x01") def on_connect(self): - print "%s: connected" % self.user.name + print "%s: omegle connected" % self.user.name self.send_icqconn( "== Stranger CONNECTED (type disconnect to disconnect) ==" ) def on_disconnect(self): - print "%s: disconnecteed" % self.user.name + print "%s: omegle disconnecteed" % self.user.name self.send_icqconn( "==Stranger Disconnected ==" ) +CAP_TYPING = '\x56\x3f\xc8\x09\x0b\x6f\x41\xbd\x9f\x79\x42\x26\x09\xdf\xa2\xf3' +# [4, 20, 0, 0, 2854066430L, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\t222840035\x00\x02'] class icqBot( oscar.BOSConnection ): - capabilities = [oscar.CAP_CHAT] + capabilities = [oscar.CAP_CHAT,CAP_TYPING] + def oscar_04_14(self,snac): + data = snac[3] + if len(data) == len("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\t222840035\x00\x02"): + user = data[11:20] + state = data[20:22] + if not self.omegleConns.has_key(user): + self.omegleConns[user] = OmegleICQChat(self,user) + + if state == "\x00\x00": #finish + try: + self.omegleConns[user].stopped_typing() + except: + pass + elif state == "\x00\x01": #idle + pass + elif state == "\x00\x02": #begin + try: + self.omegleConns[user].typing() + except: + pass + else: + print "Unknown state in typing snac\nuser %s\ndata %s\nsnac %s\nstate %X%X" % (user,data,snac,state[0],sate[1]) + else: + print "komisches tpying snac" + def initDone( self ): self.requestSelfInfo() self.requestSSI().addCallback(self.gotBuddyList) @@ -92,7 +132,7 @@ class icqBot( oscar.BOSConnection ): elif self.omegleConns[user.name].is_connected and not self.omegleConns[user.name].is_confirmed: self.sendMessage(user.name, "Wait for connection confirm from omegle") else: - self.omegleConns[user.name].send(message) + self.omegleConns[user.name].send(message.decode(multiparts[0][1])) except Exception,e: print "error: %s %s\n%s" % (user,multiparts,e) @@ -108,16 +148,41 @@ class icqBot( oscar.BOSConnection ): packet += struct.pack(">H", len(responsString)) + responsString self.sendSNACnr(0x13, 0x1a, packet) def connectionLost(self,reason): - oscar.BOSConnection.connectionLost(self,reason) print reason - self.connect() + class OscarCrap( oscar.OscarAuthenticator ): BOSClass = icqBot + +from twisted.internet.protocol import Protocol, ReconnectingClientFactory + +class OscarClientFactory(ReconnectingClientFactory): + def startedConnecting(self, connector): + print 'Started to connect.' + + def buildProtocol(self, addr): + print 'Connected.' + print 'Resetting reconnection delay' + self.resetDelay() + return protocol.ClientCreator( reactor, OscarCrap, uin, password, icq=1 ).connectTCP( 'login.icq.com', 5238 ) + + + def clientConnectionLost(self, connector, reason): + print 'Lost connection. Reason:', reason + ReconnectingClientFactory.clientConnectionLost(self, connector, reason) + + def clientConnectionFailed(self, connector, reason): + print 'Connection failed. Reason:', reason + ReconnectingClientFactory.clientConnectionFailed(self, connector, + reason) + + + log.startLogging(sys.stdout) -protocol.ClientCreator( reactor, OscarCrap, uin, password, icq=1 ).connectTCP( 'login.icq.com', 5238 ) +#protocol.ClientCreator( reactor, OscarCrap, uin, password, icq=1 ).connectTCP( 'login.icq.com', 5238 ) +reactor.connectTCP('login.icq.com', 5238, OscarClientFactory()) reactor.run() diff --git a/slides/slides.tex b/slides/slides.tex index 4cebae1..658fdfe 100644 --- a/slides/slides.tex +++ b/slides/slides.tex @@ -79,8 +79,8 @@ DHBW Stuttgart Aussenstelle Horb} \begin{itemize}\small \item Zum Testen der eigenen ,,Omegle-Applikationen'' \item ebenfalls mit python und twisted-Framework - \item Zurzeit teils funktionsfähig. Weitere Funktionen wie Malen - oder Bildertausch geplant + \item Funktiosnfähig aber nicht Fertig + \item Malfunktion, Bilderupload \end{itemize} \end{column} \begin{column}{7cm} @@ -242,16 +242,14 @@ SELECT message FROM omegle_messages WHERE ( message ILIKE \frame{\frametitle{Auswertung} \begin{itemize} - \item Abbruch der Verbindung mit ,,Processing Failed''. Filter? \item Asiaten brechen bei {\it sinnlosen} Bot-Aussagen weniger ab \item Die allgemein schlechten Englischkentnisse auf Omegle begünstigen den Einsatz von Megahal + \item Längste Zeit eines normalen Chats mit einem Bot: 30min \end{itemize} } \frame{\frametitle{Auswertung Megahal} \begin{itemize} - \item Megahal ist hin und wieder in der Lage seinem Partner nicht - aufzufallen \item Das Trainieren von Megahal mit Begriffen aus Konversationen rund um Cybersex ist sinnvoll, wenn lange Konversationen gewünscht sind da hier Fehler des Bots nicht so stark ins Gewicht fallen @@ -268,28 +266,30 @@ SELECT message FROM omegle_messages WHERE ( message ILIKE \end{itemize} } -\begin{frame}\frametitle{Probleme} +\begin{frame}\frametitle{Probleme und Lösungen} \begin{itemize} + \item Selten: Abbruch der Verbindung mit ,,Processing Failed'' + \item Einsatz eines Captchas würde Bots verhindern \end{itemize} \end{frame} \begin{frame}\frametitle{Rechtliche Aspekte} \begin{itemize}\tiny - \item § 202a StGB: Die Daten sind nicht gegen unbefugten Zugang besonders gesichert - wobei der Zugang im beschriebenen Szenario auch berechtigt ist und keine besondere Sicherung vorliegt + \item § 202a StGB: Die Daten sind nicht gegen unbefugten Zugang besonders gesichert, + wobei der Zugang im beschriebenen Szenario auch berechtigt ist - \item § 202b StGB Abfangen von Daten: Die Datenübermittlung ist öffentlich, die Daten sind für - jeden Omegle.com Benutzer bestimmt. Jeder Nutzer gibt sein Einverständniss, dass Unbekannte seine Texte lesen. + \item § 202b StGB: Die Datenübermittlung ist öffentlich, die Daten sind für + jeden Omegle.com Nutzer bestimmt. Jeder Nutzer gibt sein konkludentes Einverständnis, dass Unbekannte seine Texte lesen \item § 303a StGB scheitert an der Rechtswidrigkeit der Datenveränderung. Durch die durch den jeweiligen Urheber der vorliegenden - Nachrichten, dessen Inhalt verändert wird, beim Betreten des Chatrooms konkludent abgegebene Einwilligung, das Geschriebene - öffentlich zu machen, ist es nicht rechtswidrig, die Daten verändert weiterzuverarbeiten. + Nachrichten, dessen Inhalt verändert wird, beim Betreten des Chatrooms konkludent abgegebene Einwilligung, das Geschriebene + öffentlich zu machen, ist es nicht rechtswidrig, die Daten verändert weiterzuverarbeiten \item § 303b I StGB scheitert, da kein fremder Betrieb, kein fremdes Unternehmen und keine Behörde vorliegt, für die die - Datenverarbeitung von wesentlicher Bedeutung ist. + Datenverarbeitung von wesentlicher Bedeutung ist - \item Omegle hat keine AGB, Terms of Service, Impressum o.ä. + \item Omegle hat keine AGB, Terms of Service, Impressum o.ä., in denen die Rechte des auf dem Portal geschriebenen in besonderer Weise geschützt sind. \end{itemize} \end{frame} @@ -308,6 +308,7 @@ SELECT message FROM omegle_messages WHERE ( message ILIKE \item megahal \url{http://megahal.alioth.debian.org/} \item python-omegle tools \url{http://xapek.org/svn/common/omegle} \item Omegle Klon in python \url{http://xapek.org/svn/common/chat} + \item Review des Omegle Protokoll und des Omegle-Klon iddin.com \url{http://xapek.org/wiki/index.php/Random_Webchats_-_dont_talk_to_some_Stranger} \item Perl WWW::Omegle \url{http://search.cpan.org/~revmischa/WWW-Omegle-0.02/lib/WWW/Omegle.pm} \item PHP Omeglelogger \url{http://code.google.com/p/omeglelogger/} -- cgit v1.2.1