ICQ-Proxy schreiben

hallo @all,

da die Formulierung meines Vorhabens dazu im letzten Thread für manche Mitglieder hier zu "kriminell" war, versuche ich es nun noch einmal etwas sanfter:

Ich versuche (nun schon seit längerem) einen eigenen ICQ-Proxy zu schreiben (was ja auch völlig legal ist, schließlich unterstützt ICQ das sogar!). Jedoch komme ich einfach nicht weiter so lange ich nicht weiß, wie die Kommunikation zwischen ICQ-Client und ICQ-Server (also praktisch der Datenverkehr bzw. die Verkehrsreihenfolge) abläuft.
Es ist ja schon mal klar, dass die ersten Datenpakete vom Client geschickt werden, was man ja mit dem Login bewirkt. Daraus ergibt sich folgendes Konzept:
Transferprotokoll (Client-Server/Server-Client):
1. Client --> Server
2. Server --> Client

Aber wie geht es weiter? Sendet nun der Client wieder etwas, oder wartet er nochmal auf ein weiteres Paket vom Server? Und was genau wird da pro Aktion versendet? Wieso reichen da nicht einfach 2 Schritte, sodass der Client die Daten an den Server schickt, und der Server schickt dann, je nach Möglichkeit entweder die Benutzerdaten, ansonsten eine Fehlermeldung...

Kann mir da jemand vielleicht weiterhelfen, der sich mit dem Transferprotokoll etwas besser auskennt?


Viele Grüße
Gapa
 
hier der link zur doku vom "OSCAR" protokoll.

vielleicht hilft dir das ja weiter :)
 
@Gapa

Du kannst ICQ durch SOCKS proxy schleifen. Du musst dich dabei nicht wirklich um ICQ selbst kuemmern.
SOCKS Proxy gibts reichlich und auch mit code zum studieren.

Ansonsten (Allgemein)Stichwort TCPproxy.
 
icq-proxy

Hallo nochmal,

ich kann mir das irgendwie alles gar nicht richtig vorstellen!
Ich habe jetzt wirklich lange gegoogelt, und jedesmal einen anderen Ansatz gefunden...
Zuerst mal:
- Gibt es denn verschiedene ICQ-Protokolle??
- Was hat das ICQ-Protokoll mit Jabber, OSCAR etc. zu tun??
- Kann ich mit unterschiedlichen Protokollen mit dem ICQ-Server kommunizieren?
- Brauche ich überhaupt ein ICQ-Protokoll?? Schließlich kann ich doch auch Infos bzw. Daten ohne zusätzliche Protokolle einfach über das TCP/IP - Protokoll an den ICQ-Server schicken...!?!

Ich habe mal alle Datenpackete gesnifft, die vom Start des ICQ-Clients bis nach dem Login verschickt bzw. empfangen wurden.
Da kommen und gehen Packete von mindestens 15 verschiedenen IPs!!! Einmal von AIM, dann wieder was anderes...mindestens 300 - 400 Datenpakete!
Müsste ich denn jedes dieser Datenpackete in meinem Proxy immitieren??

Könnte mir da vielleicht jemand etwas genauer erklären, wie man überhaupt an so ne Sache rangeht? Mit Googeln tut man sich hier wirklich sehr schwer, und das zeigen allein schon die Userberichte von denen, denen es geht wie mir!

Viele liebe Grüße
Gapa
 
Hallo,
naja du möchtest ja einen Proxy schreiben, da musst du nicht immitieren.

Du musst einfach nur alle Packete die vom ICQ Client ankommen weiter an den ICQ Server senden und alle Antworten die vom ICQ Server ankommen zurück an den ICQ Client senden. Fertig.

Wie das Protokoll aussieht, ist relativ egal.
 
senden & empfangen - weiterleiten

Hallo,

Eben! Das meine ich ja auch! Nur ist mein einziges noch vorhandenes Problem die Reihenfolge, in der der Client Daten selbst schickt und vom Server empfängt!
Ich habe nähmlich festgestellt, dass manchmal mehrere Antworten hintereinander vom ICQ-Server kommen...
Gibts da vielleicht ne Liste oder ein Transferprotokoll oder ähnliches?
Meine zweite Frage:
Kann ich so was mit dem TCP - Protokoll machen oder benutzt ICQ da UDP?
Viele Grüße
Gapa
 
Könnte mir da vielleicht jemand etwas genauer erklären, wie man überhaupt an so ne Sache rangeht? Mit Googeln tut man sich hier wirklich sehr schwer, und das zeigen allein schon die Userberichte von denen, denen es geht wie mir!

Soso. Also wenn du nach ICQ/OSCAR Protokoll suchst, findet man u.A. die Seite direkt bei AOL:

http://dev.aol.com/aim/oscar/

Ueber Wikipedia findet man noch:
http://www.climm.org/ICQ-OSCAR-Protocol-v7-v8-v9/index.html

Und da gibts sogar Links zu ICQ libs.

ICQ ist ein Messenger Protokoll und nichts dergleichen wie TCP/UDP/IP.

Also nochmal fuer Dich: Du kannst einen SOCKS PRoxy benutzen/schreiben.
Und es macht Sinn sich mal anzusehen was einen SOCKS ueberhaupt ausmacht. Dir werden
Die Augen aufgehen!

Guck Dir die verlinkten Texte an (besonders bei AOL) und wenn du das halbwegs gefressen hast,
bist du auch in der Lage qualifizierzere Fragen zu stellen.

ps
The OSCAR protocol is a binary protocol and is transmitted in network byte order unless otherwise noted. The application protocol stack consists of TCP for networking, a FLAP layer providing framing, and SNACs representing the OSCAR protocol messages. Many of the server connections support TLS between the FLAP and TCP layer if single hop encryption is desired. In most cases, the binary data stream is formed by appending the elements described below in order with no extra padding.
 
Schau dir mal noch den ICQ-Transport PyICQt für das Jabber-Netzwerk an. Das is quelloffen, in Python geschrieben und sollte dir zumindest etwas Hilfestellung geben wie andere Programme ihre Kommunikation mit den ICQ-Servern abwickeln.
 
Wenn ich dich richtig verstehe, ist dein Problem, dass du nicht weißt in welcher Reihenfolge du send und recv aufrufen sollst ?
Das Problem lässt sich recht einfach umgehen, indem du den socket auf non-blocking setzt (siehe hier, evt. kannst du auch select oder poll verwenden um zu prüfen ob Daten vorhanden sind ), oder du könntest für client und server gesonderte threads anlegen.

Ich bin mir aber nicht sicher, ob 2 gepufferte Pakete dann als 1 Nachricht gelesen werden.
Es könnte auch sein, dass das Paket vom Server aufgrund seiner Größe "auf dem Weg" zerteilt wurde, in dem Fall sollte es kein Problem sein die Teile als ein ganzes an den Client weiterzuleiten.

Könntest du deinen Proxy mal etwas genauer beschreiben, z.B. welche Sprache du verwendest, oder welche Art von Sockets du einsetzt (die Umsetzung ist mir grad nicht so ganz klar).
 
Zurück
Oben