0

scapy 関数 (traceroute) の出力を Python スクリプトの文字列にキャプチャしようとしています。この関数を stdout にパイプする必要があることは理解しています (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 に答える