0

我正在尝试将 scapy 函数(traceroute)的输出捕获到 python 脚本中的字符串。我知道我需要将此函数通过管道传输到标准输出(就像您对 subproces.call() 所做的那样,但不确定如何使用 scapy 执行此操作,是否有人能够提供任何帮助?我是 Python 新手。

相关代码如下。

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

traceroute('www.google.com')
4

2 回答 2

2

你也可以像这样调用traceroute:

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变量将包含作为跟踪一部分的主机列表。

于 2011-12-22T22:20:32.070 回答
0

您可以通过sys.stdout使用类似文件的对象(例如StringIO)进行修补来做到这一点:

#!/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()

无论如何,请注意,您需要的信息可能已经在traceroute方法返回的对象中:

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

注意:您可以在此问题的答案中找到有关修补标准输出的更多信息。

于 2011-12-22T22:19:05.410 回答