2010-02-24 4 views
3

nmap 도구에는 [#nmap -A -T4 localhost] 스캔을 수행 할 때 상태의 종류를 표시 할 때 이와 같은 기능이 있습니다. 정보 "타이밍 : 약 6.17 % 완료"bash 명령은 proceess에서 keypress를 반복적으로 에뮬레이션 함

질문 -이 키 누르기가 bourne shell의 키보드를 건드리지 않고 반복적으로 발생하도록하려면 어떻게해야합니까?

ps : PHP 프로세스의 stdout이 stdout 파이프를 닫은 후에 만 ​​반환되고 php의 pty 에뮬레이션이 fbsd에서 작동하지 않으면 php의 proc_open 함수에서 버그를 해결하려고합니다.

질문이 닫 혔습니다. 문제는 "기대"유틸리티

#!/usr/local/bin/expect 

spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost 
expect arting {sleep 3; send \r} 
while {1} { 
     expect eof { 
      send_user "finished\n"; 
      exit; 
     } "done;" { 
      sleep 3; 
      send \r; 
      continue; 
     } 

} 
+0

일부 출력 버퍼링에 취약합니까? 아마도 fflush()를 시도해보십시오. –

+0

예, 행운을 비네했습니다. – johnrembo

+0

기대 기반 솔루션을 사용 했으므로 더글러스에게 도움을 준 답변을 선택하여 적절한 보너스를 제공하십시오. 질문에 해결책을 추가하는 것이 좋았습니다. 그렇게 해줘서 고맙습니다. –

답변

3

expect를 사용하는 것이 아마 가장 쉬운 방법으로 해결했다.

1

궁극적 인 'yes man'프로그램이 필요한 것을 할 수 있습니다 - 프로그램은 'yes'라고하며 반복적으로 동일한 입력 행을 반복해서 생성합니다.

yes ok | recalcitrant.php 

이렇게하면 불량 PHP에 'ok'와 개행 문자가 자주 전송됩니다. 수신 프로그램이 입력을 읽는 속도에 따라 속도가 제한됩니다. 이것은 GNU 유틸리티 및 다른 대부분의 유닉스 기반 플랫폼에서 사용 가능합니다. 당신이 처리의 모든 정보가 필요한 경우

는하지만, 다음은 Tcl 기반의 'expect'

+0

아니요 -이 것도 작동하지 않습니다. 나는 지금 "기대하는"세계에 깊이 파고 들려고 노력하고있다. – johnrembo

+0

@johnrembo : 솔직히 말하면, 나는 그것이 당신이 필요로하는 것을하지 않는다는 것에별로 놀랍지 않다. 실제로, 나는 그것이 종종 유용하다고 생각하지 않는다고 생각합니다. 그럼에도 불구하고 그것은 존재하고 당신이 필요로하는 것을 수행합니다. 훨씬 단순한 것은 없습니다. 그러나 출력에 적응성이 필요하다면 '기대하다'가 아마도 필요한 것일 것입니다. –

+0

그리고 아직도 - "예"유틸리티가 꽤 유용하다는 것을 발견했습니다. (이 특별한 경우는 아닙니다.) - 지금까지 존재의 존재를 어떻게 알지 못했을 지 상상할 수 없습니다. "enter"키) – johnrembo

1

참고, 당신은 무한 루프를 제거 할 수 있습니다

spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost 
expect arting {sleep 3; send \r} 
expect { 
    "done;" { 
     sleep 3 
     send \r 
     exp_continue 
    } 
    eof 
} 
puts "finished" 

는 당신이 필요로 확실 sleep? 그들은 일반적으로 명령과 일치하는 -regexp을 사용하여 피할 수 있습니다.

유용한 요령 : 개발하는 동안 exp_internal 1을 사용하여 패턴이 명령 출력과 어울리는지를 자세히 알아보십시오.

+0

글렌, 팁 용 고맙습니다. – johnrembo