我试图将scapy函数(traceroute)的输出捕获到python脚本中的字符串。我知道我需要将此函数传递给stdout(就像你使用subproces.call()那样但不确定如何使用scapy这样做,是否有人能够提供任何帮助?我是Python的新手。
下面的相关代码。
#!/usr/bin/env python
from scapy.all import traceroute
traceroute('www.google.com')
答案 0 :(得分: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
变量将包含作为跟踪一部分的主机列表。
答案 1 :(得分: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()
注意:您可以在此question的答案中找到有关修补标准输出的详细信息。