The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Немогу авторизоваться на свиче клиентом (socket , С )"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Немогу авторизоваться на свиче клиентом (socket , С )"  +/
Сообщение от maximka (??) on 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 не работает, вернее срабатывает один раз.
почему не работает?
Заранее всем спасибо!!!

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Немогу авторизоваться на свиче клиентом (socket , С )"  +/
Сообщение от maximka (??) on 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
:)))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Немогу авторизоваться на свиче клиентом (socket , С )"  +/
Сообщение от maximka (??) on 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Немогу авторизоваться на свиче клиентом (socket , С )"  +/
Сообщение от jd (??) on 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. А вообще,

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру