URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8485
[ Назад ]

Исходное сообщение
"Немогу авторизоваться на свиче клиентом (socket , С )"

Отправлено maximka , 22-Окт-09 18:03 
7.2-RELEASE-p2
Задача следующая:
нужна программка которая подключалась к свичам и делала какието действия, аналог на perle работает на ура, но там я испльзую библиотеку телнета,а в С нашел только такой вариант, если есть какая то библиотека для С подскажите буду признатилен)
#include <stdio.h>
#include <netdb.h>
#include <time.h>
#include <arpa/telnet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

char Buffer[204800];
char out_buf[BUFSIZ];
int hSocket,i, rd;

int main()
{
    char *arg_host = "192.168.14.2";
    int sock;
    struct sockaddr_in addr;
    struct hostent *srvinfo;


        sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        perror("socket");
        exit(1);
    }

    addr.sin_family = AF_INET;
    addr.sin_port = htons(23); //
    srvinfo = gethostbyname(arg_host);
    addr.sin_addr = *(struct in_addr *) srvinfo->h_addr;
    if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("connect");
        exit(2);
    }

sleep(1);
memset(Buffer,0, sizeof(Buffer));
rd=recv(sock, Buffer, sizeof(Buffer), 0);
printf("Recieved %d bytes: %s\n", rd, Buffer);
sleep(1);

memset(out_buf,0, sizeof(out_buf));
sprintf(out_buf, "%s", "Admin\r\n");//printf(out_buf);
rd = send(sock, (void*)&out_buf, sizeof(out_buf), 0);
sleep(1);
memset(Buffer,0, sizeof(Buffer));
rd = recv(sock, Buffer, sizeof(Buffer), 0);
printf("Recieved %d bytes: %s\n",rd, Buffer);

sleep(1);
memset(out_buf,0, sizeof(out_buf));
sprintf(out_buf, "%s", "password\r\n");//printf(out_buf);
rd = send(sock, (void*)&out_buf, sizeof(out_buf), 0);
sleep(1);
memset(Buffer,0, sizeof(Buffer));
rd = recv(sock, Buffer, sizeof(Buffer), 0);
printf("Recieved %d bytes: %s\n",rd, Buffer);


    close(sock);

    return 0;
}
когда запускаю выдает:
server# ./telcli
Recieved 26 bytes: ��������

UserName:
Recieved 39 bytes: Admin
Password:
UserName:
UserName:
Recieved 43 bytes: password
Password:authentication failed

server#

такое ощущение что "\r\n" нажатие Enter не работает, вернее срабатывает один раз.
почему не работает?
Заранее всем спасибо!!!


Содержание

Сообщения в этом обсуждении
"Немогу авторизоваться на свиче клиентом (socket , С )"
Отправлено jd , 23-Окт-09 04:35 
>в С нашел только такой вариант, если есть какая то библиотека для
>С подскажите буду признатилен)

Протокол telnet предполагает обмен некими служебными данными сразу после установления соединения, возможно дело в этом - ваши логин/пароль могут частично потеряться на этом этапе. Неплохая библиотека для C/C++, реализующая telnet (и многие другие протоколы) - libcurl.


"Немогу авторизоваться на свиче клиентом (socket , С )"
Отправлено maximka , 23-Окт-09 12:48 
>Протокол telnet предполагает обмен некими служебными данными сразу после установления соединения, возможно
>дело в этом - ваши логин/пароль могут частично потеряться на этом
>этапе. Неплохая библиотека для C/C++, реализующая telnet (и многие другие протоколы)
>- libcurl.

Спасибо за помощь), буду искать что это и с чем едят)


а проблему поборол)
вот что изменил:
sprintf(out_buf, "%s", "Admin\rpassword");//printf(out_buf);

и sprintf(out_buf, "%s", "show\r");//printf(out_buf);
"\r" - как я понял это Enter
:)))


"Немогу авторизоваться на свиче клиентом (socket , С )"
Отправлено maximka , 23-Окт-09 18:17 
>Протокол telnet предполагает обмен некими служебными данными сразу после установления соединения, возможно
>дело в этом - ваши логин/пароль могут частично потеряться на этом
>этапе. Неплохая библиотека для C/C++, реализующая telnet (и многие другие протоколы)
>- libcurl.

по поводу curl telnet, все работает но авторизации пока нет(((, на родном форуме тоже про это писали, типо в будующем) возможно.

NOTE: the telnet protocol does not specify any way to login with a specified user and password so curl can't do that automatically. To do that, you need to track when the login prompt is received and send the username and password accordingly.

http://www.cs.stonybrook.edu/documentation/curl/index.html


"Немогу авторизоваться на свиче клиентом (socket , С )"
Отправлено jd , 24-Окт-09 01:13 
>NOTE: the telnet protocol does not specify any way to login with
>a specified user and password so curl can't do that automatically.
>To do that, you need to track when the login prompt
>is received and send the username and password accordingly.

Ну да, всё правильно. Вы же знаете, каким приглашением ваш свич запрашивает логин/пароль? Ждёте, пока он их запросит и выдаёте ему то, что нужно. Похоже на то, что вы делали в первом посте, только более корректно по отношению к протоколу telnet. А вообще,

> а проблему поборол)

разве у вас всё уже не заработало? Так в чём тогда проблема?


"Немогу авторизоваться на свиче клиентом (socket , С )"
Отправлено maximka , 26-Окт-09 11:35 
>Ну да, всё правильно. Вы же знаете, каким приглашением ваш свич запрашивает
>логин/пароль? Ждёте, пока он их запросит и выдаёте ему то, что
>нужно. Похоже на то, что вы делали в первом посте, только
>более корректно по отношению к протоколу telnet. А вообще,
>разве у вас всё уже не заработало? Так в чём тогда проблема?

) Чето я не понял)!
через libcurl можно соединяться с телнетом? вернее соединяться можно, а вот с авторизацией проблема.Если можно ПРИМЕР, потому как что я не делал, но лог и расс мне приходилось вводить вручную.
Буду признателен!!!