2011-12-22 7 views
0

scapy 함수 (traceroute)의 출력을 파이썬 스크립트의 문자열로 캡처하려고합니다. 이 함수를 stdout에 파이프해야한다는 것을 이해합니다 (subproces.call()을 사용하는 것처럼). 그러나 scapy를 사용하여이를 수행하는 방법을 잘 모르면 아무도 도움을 줄 수 있습니까?파이썬에서 Scapy 함수 출력 캡처

아래의 관련 코드 .

#!/usr/bin/env python 
from scapy.all import traceroute 

traceroute('www.google.com') 

답변

0

(예 StringIO에 대한) 파일 - 류의 객체 sys.stdout를 패치하여 그렇게 할 수 있습니다 어쨌든

#!/usr/bin/env python        
from scapy.all import traceroute 
from StringIO import StringIO 
import sys 

stdout = StringIO() 
sys.stdout = stdout 
result, unanswered = traceroute('www.google.com') 
sys.stdout = sys.__stdout__ 

print 'Captured stdout:', stdout.getvalue() 

, 당신이 필요로하는 정보가 객체에 이미 아마주의하시기 바랍니다에 의해 반환 됨방법 :

print result.summary()          
print unanswered.summary() 

참고 :이 question에 대한 답변의 표준 출력을 패치에 대한 자세한 정보를 찾을 수 있습니다.

2

당신은 또한 다음과 같은 경로 추적 호출 할 수 있습니다

trace, _ = traceroute("www.example.org", verbose=0) 
# trace.get_trace() returns a rather impractical format, so we need 
# to convert it. First, we only want the first trace available 
hosts = trace.get_trace().values()[0] 

# hosts will be in the format { 1: ("1.2.3.4",  False), 
#        2: ("10.20.30.40", False) ... } 
# We convert it to ["1.2.3.4", "10.20.30.40", ...] here: 
ips = [hosts[i][0] for i in range(1, len(hosts) + 1)] 

된 후 ips 변수는 추적의 일부 호스트의 목록이 포함됩니다.

+0

위대한 완벽한 해결책처럼 보입니다. 나를 위해 두 번째 줄을 설명해 주시겠습니까? – user1112539

+0

에서 'a'등급을 얻는 것이 확실하지 않습니다. 물론 '추적'이어야합니다. 그것을 편집하고 몇 가지 덧글을 추가 –