[Gelöst] Winsock - Anmeldung



  • Guten Tag alle miteinander,

    ich versuche im Moment eine Socket-Verbindung zu einem Switch (Cisco Catalyst 2950) herzustellen. Allerdings habe ich ein Problem bei der Anmeldung am Switch.

    Wenn ich eine Telnet-Verbindung zum Switch aufbaue, kommt als erste Eingabe das Login-Passwort. Meine Überlegung war also, dass ich nur eine Verbindung zum Switch herstellen muss und dann das Passwort senden muss (nach kurzem Delay).
    Realisiert habe ich es wie folgt:

    #include <cstdlib>
    #include <iostream>
    
    #ifdef WIN32
           #include <winsock.h>
           #include <windows.h>
    #elif unix
          #include <netinet/in.h>
          #include <sys/socket.h>
    #endif
    
    using namespace std;
    
    const int defbufflen = 1024;
    
    int main(int argc, char *argv[])
    {   
        WSADATA ws;
    
        int tcp_socket = 0, check = 0, rbytes = 0, sbytes = 0;
        struct sockaddr_in peer;
        char recvbuff[defbufflen] = { 0 };
        char sendbuff[defbufflen] = { 0 };
    
        check = WSAStartup(0x0101, &ws);
    
        if(check != 0) {
               printf("Error %d (WSAStartup).\n", check);
               return (1);
        } else {
               printf("WSA gestarted.\n");
        }
    
        peer.sin_family = AF_INET;
        peer.sin_port = htons(23);
        peer.sin_addr.s_addr = inet_addr("172.16.50.9");
    
        tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
    
        if(tcp_socket < 1) {
            printf("Error! Couldn't open device.\n");
            system("PAUSE");
            return 0;
        }
    
        check = connect(tcp_socket, (struct sockaddr*)&peer, sizeof(peer));
    
        if(check == SOCKET_ERROR) {
               printf("Error %d (couldn't connect to device! - Error %d.\n", WSAGetLastError());
               system("PAUSE");
               return (1);
        } else {
               printf("Connection compounded.\n");
        }
    
        //ReceiveBytes(tcp_socket, recvbuff);
        //strncpy(recvbuff_save, recvbuff, defbufflen);
    
        strncpy(sendbuff, "brian", defbufflen);
        sbytes = send(tcp_socket, sendbuff, strlen(sendbuff), 0);
        printf("%d Bytes had been sent (%s).\n", sbytes, sendbuff);
        Sleep(5000);
    
        return 0;
    }
    

    Der Code funktioniert soweit auch und er sendet auch die 5 Bytes ("brian"). Meine Frage ist jetzt nur, ob meine Vorgehensweise prinzipiell richtig ist, dem Switch einfach die "Wörter" zu senden?

    Ich war mir nicht sicher ob, das hier das richtige Forum ist. Wenn nicht; entschuldigt bitte ^^.



  • Hm, kann mir niemand helfen? Oder ist die Frage einfach zu primitiv bzw. zu unverständlich?

    Inzwischen denke ich auch, dass ich dem Switch bestimmte Keywords vor den Eingaben schicken muss, weiß da vllt. jemand mehr?



  • Hallo,
    ja, das sieht soweit korrekt aus. Ich kenne mich selbst mit telnet nicht weiter aus, aber es gibt einen (oder eher mehrere) RFC darueber, wo beschrieben wird, wie genau die Kommunikation auszusehen hat. Darin findest du die Informationen, was du evtl. noch vorher senden musst.
    Speziell ins Auge gefallen ist mir:
    http://www.faqs.org/rfcs/rfc1572.html
    wo etwas zum Login steht (ueber Variablen, 5. Well Known Variables) - ich habe es mir nicht naeher angeschaut.

    Ansonsten gibt es weitere Verweise zu RFCs bei den Weblinks im Wikipedia-Artikel.

    Ggf. kannst du dir auch den Quellcode zu einem Opensource-Telnet-Client anschauen oder dir eine Bibliothek suchen, die das ganze fuer dich macht.

    Gruss,
    DeSoVoDaMu



  • Das password muss noch terminiert werden,.. also ENTER taste im sendbuff dranghängen,.. gruß



  • Danke sowohl DeSoVoDaMu als auch zeusosc.

    Ich hab zwar kein "Keyword" für die Authentifizierung in den RFCs gefunden aber ich verstehe das Protocol jetzt besser 🙂

    Das mit der Terminierung werde ich so bald wie möglich (am Donnerstag) ausprobieren.

    Allerdings ist mir noch nicht ganz klar wieso ich ENTER mitschicken soll? Ich dachte mir, dass die send-Funktion das für mich erledigt. Kann mir das vllt. jemand näher erläutern?



  • Hi,
    wenn du per telnet dein pwd eingibst, drückst du doch auch enter oder nicht??
    ausserdem sendet send nur die zeichenkette, falls send trotz aller erwarten ein \0 mitsendet wird es dennoch nicht als eingabe bestätigung verwertet, sondern reagiert nur auf LF und CR,.. (z.b. post's sind auch vom http header auch durch \cr\lf\cr\lf getrennt)

    grüüße



  • Danke vielmals. Hast mir sehr geholfen 🙂


Anmelden zum Antworten