Перебирать список адресов IP - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть файл, содержащий разные диапазоны IP-адресов с разными подсетями. Теперь я хочу получить все хосты из всех диапазонов. Поэтому я использовал библиотеку ipadress с функцией hosts():

import subprocess
import ipaddress

if __name__ == "__main__":
    #host='8.8.8.8'
    #subprocess.run(["host", host])
    f=open('ip.txt', 'r')
    for line in f:
        #subprocess.run(["host", line])
        newLine=line+''
        newLine=newLine[:-1]#remove EOL
        #print(newLine)
        myList=ipaddress.ip_network(u''+newLine, False)#create the object
        list(myList.hosts())
        print(list)
        for i in list:
            subprocess.run(["host", i])

В настоящее время мой список пуст

adriano@K62606:~/findRoute$ python3 workingWithMask.py <class 'list'> <class 'list'>

и, следовательно, Я получаю сообщение об ошибке:

<class 'list'>
Traceback (most recent call last):
  File "workingWithMask.py", line 16, in <module>
    for i in list:
TypeError: 'type' object is not iterable

Уточняю, что файл правильно прочитан

Ответы [ 2 ]

1 голос
/ 11 февраля 2020
myList = ipaddress.ip_network(u''+newLine, False)
list(myList.hosts())
print(list)
for i in list:

Вы конвертируете myList.hosts() в список, но выбрасываете его, затем печатаете встроенный тип list, затем пытаетесь повторить его, что не имеет никакого смысла.

Вы должны где-то сохранить результат list(...), а затем повторить его.

Подумайте:

myList = list(ipaddress.ip_network(u''+newLine, False).hosts())
print(myList)
for i in myList:
    subprocess.run(["host", i])
0 голосов
/ 11 февраля 2020

Вы используете список ключевых слов, который является классом. попробуй:

        ip_list=list(myList.hosts())
        print(ip_list)
        for i in ip_list:
            subprocess.run(["host", i])
...