Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> послать команду, telnet 
V
    Опции темы
Alexey68
Дата 19.7.2015, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Здравствуйте All!
Прошу помощи.
Необходимо сделать запрос whois (telnet whois.ripe.net 43), пробую так:
Код

char ip[] = "http://www.ripe.net";
void main()
{
WSADATA wsa;
int error, port;
SOCKET s;
SOCKADDR_IN a;
port = 43;

    WSAStartup(0x0101,&wsa);
    a.sin_family = AF_INET;
    a.sin_addr.s_addr = inet_addr(ip);
    s = socket(AF_INET,SOCK_STREAM,0);
    a.sin_port = htons(port);
    error = (connect(s,(sockaddr*)&a,sizeof(a)));

send(s, "google.com\r\n", message_size, 0);// тут у меня наверное ошибка...

char buffer[10000];
int buffer_size = sizeof(buffer);
buffer_size = recv(s, buffer, buffer_size, 0);

printf("from_server: %s\n", buffer);

но соединения не происходит.
Также при приёме функцией recv, программа перестаёт отвечать...
Подключаюсь к своему роутеру на порт 23:
Код

while(buffer_size > 0)
{
buffer_size = recv(s, buffer, 255, 0);
printf("%s", buffer);
}
выводит в консоль Login: и зависает.

Что у меня неправильно?
С уважением Алексей.

Это сообщение отредактировал(а) Alexey68 - 19.7.2015, 04:46
PM MAIL   Вверх
tzirechnoy
Дата 19.7.2015, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
Что у меня неправильно?


Коды возврата функцый не проверяешь.
PM MAIL   Вверх
feodorv
Дата 19.7.2015, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  19.7.2015,  01:54 Найти цитируемый пост)
char ip[] = "http://www.ripe.net";

Цитата(Alexey68 @  19.7.2015,  01:54 Найти цитируемый пост)
    a.sin_addr.s_addr = inet_addr(ip);

Что-то я сомневаюсь, что inet_addr() переваривает префикс протокола "http://". Какое значение возвращает этот вызов?


Цитата(Alexey68 @  19.7.2015,  01:54 Найти цитируемый пост)
send(s, "google.com\r\n", message_size, 0);// тут у меня наверное ошибка...

Чему равно message_size?


Цитата(Alexey68 @  19.7.2015,  01:54 Найти цитируемый пост)
но соединения не происходит.

Сложно судить о том, что происходит или происходит, поскольку никакой дополнительной информации на экран не выводится. Как минимум:
Цитата(tzirechnoy @  19.7.2015,  15:17 Найти цитируемый пост)
Коды возврата функций не проверяешь. 


Цитата(Alexey68 @  19.7.2015,  01:54 Найти цитируемый пост)
Подключаюсь к своему роутеру на порт 23:
    
while(buffer_size > 0)
{
buffer_size = recv(s, buffer, 255, 0);
printf("%s", buffer);
}

выводит в консоль Login: и зависает.

Ну потому что нужно и что-то посылать роутеру (тот же логин), а не только ждать от него приёма.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 20.7.2015, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



после вызова:
error = (connect(s,(sockaddr*)&a,sizeof(a)));
error возвращает 0,

сейчас пробую так:

Код

char ip[] = "192.168.0.1";

void main()
{
WSADATA wsa;
int error, port;
SOCKET s;
SOCKADDR_IN a;
port = 43;
    WSAStartup(0x0101,&wsa);
    a.sin_family = AF_INET;
    a.sin_addr.s_addr = inet_addr(ip);
    s = socket(AF_INET,SOCK_STREAM,0);
    a.sin_port = htons(port);
    error = (connect(s,(sockaddr*)&a,sizeof(a)));

while (buffer_size > 0)
{    
buffer_size = recv(s, buffer, 255, 0);
printf("%s", buffer);
printf("\nSize = %d\n", buffer_size);
}

сейчас выводит: 
D-LINK Login:
Size = 115 
и также (наверное) ждёт ответа.
>>Ну потому что нужно и что-то посылать роутеру (тот же логин)
>>, а не только ждать от него приёма. 
Как мне послать логин?
Также интересует как принудительно разорвать содинение после приглашения на ввод логина? 
PM MAIL   Вверх
feodorv
Дата 20.7.2015, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  20.7.2015,  13:24 Найти цитируемый пост)
сейчас выводит: 
D-LINK Login:
Size = 115 

115 байт - это много. А "D-LINK Login:" - это всего 13 байт, остальные байты в норме?

Цитата(Alexey68 @  20.7.2015,  13:24 Найти цитируемый пост)
Как мне послать логин?

Через send:
Код

if( send( s, "login\n", sizeof("login\n")-1, 0) == SOCKET_ERROR )
{
  printf( "send() error\n" );
  exit(-1);
}


где "login" - имя на вход. Может быть, понадобится "\r\n" на конце послания вместо просто "\n", но я не уверен.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 27.7.2015, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Цитата(feodorv @ 20.7.2015,  23:17)
Цитата(Alexey68 @  20.7.2015,  13:24 Найти цитируемый пост)
сейчас выводит: 
D-LINK Login:
Size = 115 

115 байт - это много. А "D-LINK Login:" - это всего 13 байт, остальные байты в норме?

Цитата(Alexey68 @  20.7.2015,  13:24 Найти цитируемый пост)
Как мне послать логин?

Через send:
Код

if( send( s, "login\n", sizeof("login\n")-1, 0) == SOCKET_ERROR )
{
  printf( "send() error\n" );
  exit(-1);
}


где "login" - имя на вход. Может быть, понадобится "\r\n" на конце послания вместо просто "\n", но я не уверен.


Благодарю за помощь, "\r\n" всё принимает, пробую разорвать содинение, но никак не выходит.
>> А "D-LINK Login:" - это всего 13 байт, остальные байты в норме?
всё нормально.
Посылаю:
Код

send(s, "\x1D\r\n", 3, 0);//ctrl + [

но соединение не обрывается (telnet). В остальном всё как положено.
p.s. извиняюсь за отнятое время.

Это сообщение отредактировал(а) Alexey68 - 27.7.2015, 05:20
PM MAIL   Вверх
feodorv
Дата 30.7.2015, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Alexey68 @  27.7.2015,  05:17 Найти цитируемый пост)
но соединение не обрывается (telnet)

Так либо тупо closesocket(), либо послать команду "exit".


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1220 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.