Захват вывода функции Scapy в Python - PullRequest
0 голосов
/ 23 декабря 2011

Я пытаюсь записать вывод функции scapy (traceroute) в строку в скрипте Python. Я понимаю, что мне нужно передать эту функцию в stdout (как вы делаете с subproces.call (), но не знаете, как это сделать с помощью scapy, кто-нибудь может оказать какую-либо помощь?

Введите приведенный ниже код.

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

traceroute('www.google.com')

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Вы также можете вызвать 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 будет содержать список хостов, которые являются частью трассы.

0 голосов
/ 23 декабря 2011

Это можно сделать, добавив 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()

Примечание. Дополнительную информацию о исправлении стандартного вывода можно найти в ответах на этот вопрос .

...