ICQ-Kontaktliste mit BCB in eine Datei schreiben



  • Hey @all,

    und zwar wollte ich die ICQ-Kontaktliste mal speichern. Das ganze wollte ich mit dem BCB machen, jedoch ist das bei den neueren ICQ's ja so das sie die Kontaktliste am Server speichern, nun wollte ich Euch fragen wie ich die vom Server bekomme?

    Lg _freeze_



  • als client zum icq-server connecten und die kontakte ziehen.



  • Das wusste ich auch schon, ich wollte eingentlich fragen wie und wo ich da anfangen soll. Habe BCB Personal und kann mit Sockets gerade mal eine HTML datei herunterladen 😉

    Lg _freeze_



  • Schau dich doch mal im Miranda Forum um... Vielleicht gibbet da hilfe...
    Miranda isn ICQ CLient, der erweiterbar auf alle Protokolle und so is...
    Da gibbet vielleicht welche, die sich damit auskennen.



  • Was du wissen solltest ist:
    - Protokoll von ICQ (hier steht wie du dich anmelden musst etc.)
    - Server-Adresse und Port
    - generell den Umgang mit Sockets



  • Und auf der Site vom ICQ gibts ein SDK dafür. Wo genau man das da findet, auf der Site KA.



  • PuppetMaster2k schrieb:

    Was du wissen solltest ist:
    - Protokoll von ICQ (hier steht wie du dich anmelden musst etc.)
    - Server-Adresse und Port
    - generell den Umgang mit Sockets

    OK, also ich habe folgende Informationen:

    UIN: MEINE UIN
    Passwort: MEIN Passwort
    Server: login.icq.com
    Port: 5190

    Ich baue also eine Verbindung zu login.icq.com über TCP-Port 5190 auf.
    Nur was sende ich dann? Bei eine HTML Seite oder sonstigen Datein habe ich es so gemacht:

    GET http://SERVERNAME/DATEI HTTP/1.0\n\n
    

    Nur wie sende ich hier die Informationen damit ich die Contactliste als Rückgabe wert erhalte?

    Lg freeze



  • Du wirst wohl nicht umhin kommen, Dich u.a. mit dem ICQ Protokoll auseinander zu setzen. Hinweise dazu hast Du ja bereits bekommen. Ein Kochrezept wie "Gib GET Kontaktliste" ein wird es nicht geben. Connecte Dich mit Telnet auf login.icq.com Port 5190 und Du wirst sehen, da gibts nix mit HTML.
    Guck Dir halt mal die o.g. SDK an, vielleicht gehts ja damit ganz easy 🙄



  • Ja also ich habe das Protokoll, aber irgendwie stehe ich aufm Schlauch. Hier mal das Protokoll erklärt.

    http://81.217.88.130/~flex/ICQ_Protokoll.ppt

    Was soll ich jetzt wie machen?

    Lg freeze



  • Wirst nicht umhinkommen deinen eigenen Hirnschmalz zu verwenden.

    Wenn du detaillierte Fragen zu konkreten Problemen stellst wird dir hier sicher geholfen.

    Einfach mal ein allgemeine Sache in den Raum zu werfen und dann erwarten dass dir das jemand vorkaut is nich.



  • Der Link von _freeze_ zeigt Dir schamatisch die grundlegende Vorgehensweise. Jetzt mußt Du Dich "nur" noch um die Details kümmern was heissen will, was bekomme ich beim Connect vom Server geliefert und was muß ich antworten also genauer gesagt, das ICQ Protokoll.
    Ich habe leider keinen Link vorrätig, mußt also leider selber den Google bemühen 😉



  • Wie ich sagte, nimm dir das SDK. Das nimmt dir einige Arbeit eigentlich ab.
    Dafür ist es auch, jenachdem wie weit das SDK ausgebaut ist.



  • OK, also ich habe jetzt mal eine Anleitung für das ICQ-Protokoll gefunden, nur wie mache ich jetzt weiter?

    Hier mal der Ausschnitt:

    The V4 header looks like: ( before encryption )
    04 00       version
    
    xx xx       random
    00 00       zeros
    xx xx       command
    xx xx       SEQ 1
    xx xx       SEQ 2
    xx xx xx xx UIN
    xx xx xx xx checksum
    
    I use the login packet as an example below I assume all the other
    packets work 90% the same.
    
    The V4 login packet looks like
    
    04 00        Packet version
    xx xx        random
    00 00        zeros :)
    xx xx        command E8 03
    xx xx        SEQ 1 = 00 00
    xx xx        SEQ 2 = 00 00
    xx xx xx xx  UIN
    xx xx xx xx  Checksum
    xx xx xx xx  Seconds since 1-1-1970 ( also know as time( NULL ); )
    xx xx        Port for TCP connections
    00 00        Mirabilis thinks ports are 32-bit :)
    xx xx        length of password including the NULL
    var.         Password with null terminator.
    98 00 00 00  Version?  changes from client to client I think.
    xx xx xx xx  IP address in network byte order
    xx           Flag that allows peer-to-peer mode (04=peer-to-peer
    06=serveronly)
    xx xx xx xx  Status
    03 00 00 00  Version?
    00 00 00 00  ??
    00 00 98 00  Version?
    
    And of course there's the encryption.
    To generate the checksum do this:
     highest byte is the low byte of seq1
     next highest byte is low byte of zeros ( always zero I guess )
     next highedt byte is low byte of random
     lowest byte is low order byte od the command
    call this value check A
    then pick a random number less than the total packet length this is the
    high byte of the second check value.  Index into the packet that many
    bytes and that byte value is the second highest byte in check B.
    Then pick another random number less then 256 ( 8-bits) and look it up
    in the table that's in the code.  The lowest two bytes are the offset
    into the table and the value retreived from it.
    XOR check B with 0x00FF00FF and then
    XOR check A and B together.
    this is the checksum finally.
    

    Hier die Adresse: http://www.student.nada.kth.se/~d95-mih/icq/spec/v4/v4-notes.txt

    Vielen Dank im Voraus
    Ich hoffe mich kann jemand auf den rechten Weg weisen.

    Hier mal kurz ein Ausschnitt, wie ich mit eine GET-Methode eine HTML-Datei abgefragt habe:

    //GET command for html transfer
      AnsiString buf="GET http://" + tfServer->Text + "/" + tfFile->Text + "
    HTTP/1.0 \n\n";
       TWinSocketStream* wnscktstrmMain = new TWinSocketStream(Socket, 10000);
    
      //if write succeeded, read from stream
      if(wnscktstrmMain->Write(buf.c_str(),buf.Length())){ 
      [...]
    

    Lg _freeze_


Anmelden zum Antworten