2011-12-22 68 views
0

我想捕获一个scapy函数(traceroute)到​​python脚本中的字符串的输出。我知道我需要管这个函数到stdout(就像你用subproces.call()做的那样,但是不确定如何用scapy来做到这一点,是否有人能够提供任何帮助?我是Python新手。 。在Python中捕获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',当然这应该是'trace'。编辑它并添加一些评论 –