![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть задача зайти телнетом на девайс, отправить команду, получить ответ, разпарсить его и извлечь нужную информацию. С двумя типами свичей процес проходит без проблем. Начал делать третий и наткнулся на проблему - не проходит пароль.
код Код:
TN:=TTelnetSend.Create;
TN.TargetHost:=ipswitch;
TN.TargetPort:=cTelnetProtocol;
TN.Timeout:=5000;
TN.TermType:='dumb';
TN.Login;
TN.WaitFor('UserName:');
TN.Send(SwitchLogin+CRLF);
TN.WaitFor('PassWord:');
TN.Send(SwitchPassword+CRLF);
TN.WaitFor(waitfor);
TN.Send(Format('sh fdb port %d'+CRLF,[port]));
TN.WaitFor(waitfor);
TN.Send('logout'+CRLF);
Memo1.Lines.Text := TN.SessionLog;TN.SessionLog Код:
**** скип **** All rights reserved.'#$A#$D'UserName:admin'#$A#$D'PassWord:**********'#$A#$D'Fail!'#$A#$D'UserName:' так оно выглядит в обычном телнет клиенте Код:
UserName:admin PassWord:******** DES-3200-18:4#sh fdb port 6 Command: show fdb port 6 судя по всему мой клиент отсылает с пассвордом два лишних символа. длина пассворда 8 символов. С другими типами девайсов код работает без проблем. Будут ли у кого соображения по теме? Спасибо |
|
#2
|
||||
|
||||
|
Возможно символы переноса строки $D $A
|
|
#3
|
|||
|
|||
|
Проблема решена. нюансы телнета. здесь я не спец.
может кому то пригодится. во первых логин и пароль надо отсылать посимвольно. для логина надо ждать ответа . ответ - отосланая буква. для пароля надо ждать ответа * плюс перед отсылкой логина надо ждать определенный набор символов, а не только то что видно визуально. расковырял wiresharkom после "UserName:" еще идет набор символов , заканчивается комбинацией FF FE 27. работающий код Код:
TN.WaitFor('UserName:');
TN.WaitFor(#255#254#39);
for i:=1 to Length(SwitchLogin) do begin
TN.Send(SwitchLogin[i]);
TN.WaitFor(SwitchLogin[i]);
end;
TN.Send(CRLF);
TN.WaitFor('PassWord:');
for i:=1 to Length(SwitchPassword) do begin
TN.Send(SwitchPassword[i]);
TN.WaitFor('*');
end;
TN.Send(CRLF);
TN.WaitFor(waitfor); пока это всплыло только для длинка. с другими моделями таких траблов не возникало. возможно это решается проще. если есть рецепт - буду благодарен |