Создание объектов на основе узлов из traceroute
Всем привет! Совсем недавно начал изучать программирование на Python. Получил задание на проверку своего скилла, которое включает в себя следующие пункты:
- Сделать traceroute до ya.ru.
- Из этой команды вытянуть инфу об узлах, которые были на пути.
- На основе ip создать объекты в системе (делал через API, c созданием объектов проблем не возникло, благо документация была), соответствующие узлам на пути и конечному, чтобы получился некий netmap.
Проблемы возникли с получением ip для создания объектов. Сначала попробовал с помощью subprocess. Пытался результат команды преобразовать в переменную для дальнейшего использования.
df = subprocess.Popen(["tracert", "ya.ru"], shell = True, stdout = subprocess.PIPE)
df1 = df.communicate()[0]
Но в дальнейшем понял, что из переменной данные не могу использовать. Затем нашел на просторах интернета интересную статью, где с помощью модуля scapy можно сделать свою версию traceroute с блэкджеком и .... (https://jvns.ca/blog/2013/10/31/day-20-scapy-and-traceroute/)
from scapy.all import *
hostname = "google.com"
for i in range(1, 28):
pkt = IP(dst=hostname, ttl=i) / UDP(dport=33434)
# Send the packet and get a reply
reply = sr1(pkt, verbose=0)
if reply is None:
# No reply =(
break
elif reply.type == 3:
# We've reached our destination
print "Done!", reply.src
break
else:
# We're in the middle somewhere
print "%d hops away: " % i , reply.src
Соответственно в конце блоков else и elif я создавал объект с именем "reply.src". И всегда создавался только один объект, с именем конечного узла, как и при выносе создания объекта за цикл. Если убирал создание объекта в блоке elif, то создавался объект с ip предпоследнего узла. Проверил теорию, вдруг система, в которой я создаю объекты, принимает только один запрос? Тогда я сделал массив, состоящих из списка ip всех узлов и уже на основе данных из массива попытался создать объекты. В итоге получался один объект, в названии которого были ip всех узлов. Подскажите пожалуйста, какие еще методы можно использовать? Где я ошибся и почему ВСЕГДА создается только один объект?