将新IP插入列表

时间:2019-08-13 18:23:46

标签: python python-3.x networking

我有一个程序,该程序列出了网络上的IP地址以及IP地址是在线还是离线以及MAC地址。我希望离线ips在列表中,以便我可以检查该ip是否不在列表中,它将显示NEW。

idk该怎么办

import os

from getmac import get_mac_address

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

minr = int(input("Starting Ip: "))
maxr = int(input("Ending Ip: "))

ofip = ["192.168.2.0"]

while True:

    for num in range(minr, maxr + 1): #plus one is to include the last digit entered
        ip = "192.168.2." + str(num)

        from getmac import getmac

        exit_code = os.system("ping -n 1 -w 1 " + ip + " > nul") # Windows

        getmac.PORT = 44444  # Default: 55555

        if exit_code == 0:
            print(ip, bcolors.OKGREEN + "ONLINE " + bcolors.ENDC + bcolors.OKBLUE + get_mac_address(ip=ip, network_request=True) + bcolors.ENDC)

        elif exit_code != 0:
            print(ip, bcolors.FAIL + "OFFLINE" + bcolors.ENDC)
            ip = ofip

        elif exit_code != 0 and ip != ofip:
            print(ip, bcolors.OKGREEN + "NEW " + bcolors.ENDC + bcolors.OKBLUE + get_mac_address(ip=ip, network_request=True) + bcolors.ENDC)

        else:
            print(ip, bcolors.FAIL + "OFFLINE" + bcolors.ENDC)

我应该看到脱机ip地址,该地址可以在线打印新内容

2 个答案:

答案 0 :(得分:0)

此行将不执行您的预期。您需要进行一些更改。

elif exit_code != 0 and ip != ofip:

ofip是一个列表(至少是开头),而ip是一个字符串,!=在这里不起作用。您应该使用in运算符。

elif exit_code != 0 and ip not in ofip:

第二个问题是解决ip是一个字符串而ofip是一个列表的情况(第一次分配时,后来将其设置为字符串)。

而不是这样做,

ip = ofip

尝试附加到列表

ofip.append(ip)

最后一件事是,由于您的if / elif语句如何流动,第二个elif将永远不会运行。 如果退出代码不为0,则它​​将始终命中第一个elif,而永远不会命中第二个elif。切换这些。将较具体的条件放在较不具体的条件之前。

提示:您可以使用集合而不是列表进行快速查找。

import os

from getmac import get_mac_address

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

minr = int(input("Starting Ip: "))
maxr = int(input("Ending Ip: "))

ofip = ["192.168.2.0"]

while True:

    for num in range(minr, maxr + 1): #plus one is to include the last digit entered
        ip = "192.168.2." + str(num)

        from getmac import getmac

        exit_code = os.system("ping -n 1 -w 1 " + ip + " > nul") # Windows

        getmac.PORT = 44444  # Default: 55555

        if exit_code == 0:
            print(ip, bcolors.OKGREEN + "ONLINE " + bcolors.ENDC + bcolors.OKBLUE + get_mac_address(ip=ip, network_request=True) + bcolors.ENDC)

        elif exit_code != 0:
            if ip not in ofip:
                ofip.append(ip)
                print(ip, bcolors.OKGREEN + "NEW " + bcolors.ENDC + bcolors.OKBLUE + get_mac_address(ip=ip, network_request=True) + bcolors.ENDC)
            else:
                print(ip, bcolors.FAIL + "OFFLINE" + bcolors.ENDC)

答案 1 :(得分:0)

我的问题已解决,代码如下:

method: :post