【问题标题】:Iterate over an IP list addresses遍历 IP 列表地址
【发布时间】:2020-02-11 09:10:23
【问题描述】:

我有一个文件,其中包含具有不同子网的不同 IP 范围。我现在想从每个范围内获取所有主机。所以我使用了ipadress libraryhosts() 函数:

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

我准确地说,文件被正确读取了

【问题讨论】:

    标签: python-3.x ip-address


    【解决方案1】:
    myList = ipaddress.ip_network(u''+newLine, False)
    list(myList.hosts())
    print(list)
    for i in list:
    

    您将 myList.hosts() 转换为列表但将其丢弃,然后打印内置 type list 然后尝试对其进行迭代,这完全没有意义。

    您必须将list(...) 的结果保存在某处,然后对其进行迭代。

    考虑:

    myList = list(ipaddress.ip_network(u''+newLine, False).hosts())
    print(myList)
    for i in myList:
        subprocess.run(["host", i])
    

    【讨论】:

      【解决方案2】:

      您正在使用 list 关键字,它是一个类。 试试:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 2022-01-13
        • 2011-05-30
        • 2020-05-18
        • 1970-01-01
        相关资源
        最近更新 更多