2012-09-26 3 views
0

컴퓨터에 로그인 한 다음 종료하는 다음의 간단한 텔넷 스크립트를 실행하고 있습니다.텔넷 자동화 스크립트가 가끔씩 실패합니다.

하나의 Linux 서버에서 동일한 스크립트가 제대로 작동하지만 (1000 회 반복) 다른 Linux 서버에서 실패합니다 (200 회 시도 후에 실패합니다).

실패한 경우 실패하는 데 걸리는 반복 횟수는 다양하지만 실패는 지속됩니다. 클라이언트 시스템에서

  1. : (SYS-007)

    tcpdump -nvvv -w test.txt host <Server IP> 
    
    내가 잘못가는 상황을 확인하기 위해 다음과 같은 노력
    pattern match read eof at ./telnettest.pl line 15 (i.e, waitfor('/login: $/i'); Line) 
    

    :와

    #!/usr/bin/perl 
    use Net::Telnet; 
    
    my $loop = 0; 
    my $dumpfile = "dump.log"; 
    my $inputfile = "input.log"; 
    
    for ($loop =1; $loop <=1000; $loop++) { 
         print "===============Loop: $loop =====================\n"; 
         $telnet = new Net::Telnet (Timeout=>20, Errmode=>'die'); 
         print "$telnet\n"; 
         $telnet->open('sys-007'); 
         $telnet->dump_log($dumpfile); 
         $telnet->input_log($inputfile); 
         $telnet->waitfor('/login: $/i'); 
         $telnet->print('root'); 
         $telnet->waitfor('/Password:$/i'); 
         $telnet->print('007'); 
         sleep 2; 
         $telnet->print('exit'); 
         print "=================================================\n"; 
    } 
    

    스크립트 종료

이 TEST.TXT 6,

문자열 :

성공적인 시도 로그 :

sys-007 (ttyp0) 
^Fl$4 
^!^Fl$ 
login: 
^Fl$4 
^Fl$4 
root 
^(^Fl* 
root 
bP"u 
^Fl*4 
bP5u 
^.^Fl* 
Password: 
^Fl*4 
^Fl*4 
007 
^7^Fl6 
^Fl64 
^9^Fl6 
Terminal type? [xterm] 
^Fl64 
^Fl64 
exit 
^Fl<4 
^Fl< 
exit 
^Fl< 

실패 시도 :

sys-007 (ttyp0) 
*^hn 
+^hn 

없음 로그인 : 프롬프트! 서버 시스템에서

  1. : (리눅스 서버)

    [[email protected]]~% netstat --inet -a | grep telnet | grep sys-007 
    
    There are no TIME_WAIT or CLOSE_WAIT sockets. 
    

내가 잘못 무슨 일이 일어나고 있는지 알아 찾아야한다 무엇을 가르쳐주세요.

+0

tcpdump는 단순히 서버에서 예상되는 프롬프트를받지 못한다는 것을 보여줍니다. 거기에 유용한 것이 있는지 서버의 로그를 확인해야합니다. 또한'strace -ff'를 사용하여 telnetd 프로세스에 연결하여 어떤 syscalls이 작성 중인지 확인할 수 있습니다. 이는 힌트를 줄 수 있습니다. –

답변

0

다음에 정상적으로 로그인 할 수 있습니까? 너가 너무 많은 연결을했기 때문에이 다른 서버가 널 자르고있는 것 같아.

+0

나는이 스크립트가 실패한 후에도 수 차례 수동으로 로그인 할 수 있습니다 !! – Ram

+0

@Ram 글쎄, 무슨 말을 해야할지 모르겠다. eof에 관한 것은 기본적으로 서버 연결이 끊어 졌다는 의미이다. 스크립트가 실패 할 때이 스크립트를 실행중인 시스템에서 수동으로 로그인 할 수 있습니까? – CrazyCasta

+0

예, 수동으로 로그인 할 수 있습니다. 심지어 스크립트를 다시 실행하더라도 몇 가지 시도가 더 많이 진행되어 궁극적으로 실패합니다. – Ram

0

내가 의심하는 것은 텔넷 프로그램이 프롬프트를 기다리고 있다는 것입니다. 나는 일반적으로 프롬프트를 정의하기 위해 아래의 형식을 사용한다. 그래서 스크립트는 대개 주어진 옵션에서 프롬프트를 찾을 수있다.

test = new Net::Telnet (Timeout => 3000 , Prompt => '/[%#\$>?:] $/'); 
$test->open($IPAddress1); 
$test->login($Login,$Password1); 
my @input=$test->cmd("uname -a\n"); 
print "Connected to : @input"; 
@input=$cmd->cmd("pwd\n"); 

문제가 계속되면 알려 주시기 바랍니다.

+0

그의 패킷 캡처에서 서버가 아무 것도 보내지 않는 것조차 알 수 있습니다 (제대로 출력을 이해한다면). – CrazyCasta

관련 문제