我正在编写一个Python脚本来检测插入时的网络设备。我正在使用nmap。不幸的是,即使我现在没有连接/重新连接主机,nmap几乎每个循环都报告不同数量的主机。当主机未断开/连接时,如何在每个循环中获得相同的输出?
nmaps = []
nmaps_last_lines = []
import re
import os
while True:
print "Scanning"
if not nmaps:
output = os.popen('sudo nmap --host-timeout 20s -sP 10.0.1.0/24 -oG -').read()
nmaps_last_lines.append(output.split('\n')[-2])
output = re.findall('\d+\.\d+\.\d+.\d+', output)
nmaps.append(output)
else:
output = os.popen('sudo nmap --host-timeout 20s -sP 10.0.1.0/24 -oG -').read()
nmaps_last_lines.append(output.split('\n')[-2])
output = re.findall('\d+\.\d+\.\d+.\d+', output)
nmaps.append(output)
if set(output) != set(nmaps[-2]):
#previous_output = set([i.strip() for i in nmaps[-2].split('\n')[1:-2]])
#current_output = set([i.strip() for i in nmaps[-1].split('\n')[1:-2]])
print "New equipment detected"
print '\n'.join(list(set(output) - set(nmaps[-2])))
print nmaps_last_lines[-1]
print nmaps_last_lines[-2]
#print "Current output"
#print nmaps[-1].split('\n')
#print current_output
#print "Previous output"
#print nmaps[-2].split('\n')
#print previous_output
#break
扫描 扫描 检测到新设备 10.0.1.41 10.0.1.23
扫描 检测到新设备
扫描 检测到新设备 10.0.1.23 10.0.1.42
扫描 检测到新设备 10.0.1.10
扫描 检测到新设备 10.0.1.23
扫描 检测到新设备
扫描 检测到新设备 10.0.1.23 10.0.1.10 10.0.1.41 10.0.1.22 10.0.1.42
扫描 检测到新设备
扫描 检测到新设备 10.0.1.10
扫描 检测到新设备 10.0.1.23 10.0.1.21
扫描 检测到新设备 10.0.1.22
扫描 检测到新设备 10.0.1.10 10.0.1.41 10.0.1.21 10.0.1.42
扫描 检测到新设备
扫描 检测到新设备 10.0.1.10 10.0.1.23
扫描 扫描 检测到新设备
扫描 检测到新设备 10.0.1.23
扫描 检测到新设备
扫描