2012-04-03 1 views
0

방화벽에서 연결 테이블을 가져 오려고합니다. 어떤 경우에는텔넷 세션 캡처 - pexpect 및 telnetlib가 너무 느립니다.

이상 200K 라인 "외부 46.33.77.20:53415 10.16.25.63:80 내부 TCP 유휴 0시 0분 4초, UIOB 3230, 플래그 바이트"

등을 할 수 있습니다 .

나는 이러한 테이블을 잡기 위해 pexpect와 telnetlib를 모두 구현하려고 시도했습니다. 불행히도 시간 초과 및/또는 40k보다 큰 어떤 것도 죽습니다.

pexpect 구현 :

connect.send("sho conn\n") 
connect.expect("<--- More --->", timeout=360) 
tmp_txt = connect.before 

telnetlib 구현 :

telnet.write("sho conn\n") 
tmp_text = telnet.read_until("<--- More --->") 

이 정보를 잡는의보다 강력한 방법이 있습니까? 필자는 호출기 값을 사용하여 한 번에 줄 수를 제어합니다 (실행 전). 또한 - 방화벽에서 CPU를 모니터링하므로 연결이 표시되고 있음을 알 수 있습니다. 너무 많거나 너무 빠르면 pexpect 또는 telnetlib가 계속 유지됩니다.

감사합니다.

+0

http://www.lag.net/paramiko/ – tMC

+0

@tMC - 불행히도 SSH가 아닌 텔넷이어야합니다. – BDub

+0

이 방화벽은 어플 라이언 스인 것처럼 보이지만 Linux를 실행하는 표준 PC는 아닙니다. 어떤 기계입니까? – tMC

답변

0

내 접근 방식이 괜찮은 것 같습니다. 또한 방화벽 CPU를 낮게 유지하기 위해 출력을 페이지화 한 다음 한 번에 전체 화면 출력을 캡처합니다.

시간 초과 오류가 발생하면 각 줄 또는 특정 출력 줄 (일반 형식이있는 것으로 가정)을 예상하는 루프가되도록 수정 한 다음 "more "다음 화면으로 넘어갑니다. 나는이 패턴을 여러 곳에서 일시 중지 할 수있는 긴 출력 스트림을 처리하는 데 많이 사용했습니다.

당신은 예외가 제기되는 것에 대해 더 자세하게 설명하지 않는 한, 파이썬 프로세스가 죽었다고 언급합니다. 우리는 당신을 도울 수 없습니다.

관련 문제