Создание объектов на основе узлов из traceroute

Всем привет! Совсем недавно начал изучать программирование на Python. Получил задание на проверку своего скилла, которое включает в себя следующие пункты:

  1. Сделать traceroute до ya.ru.
  2. Из этой команды вытянуть инфу об узлах, которые были на пути.
  3. На основе 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 всех узлов. Подскажите пожалуйста, какие еще методы можно использовать? Где я ошибся и почему ВСЕГДА создается только один объект?


Ответы (0 шт):