我有一个程序,该程序列出了网络上的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地址,该地址可以在线打印新内容
答案 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