前几日,管虚拟化的小哥,在创建一台虚拟机时,使用了一个之前已使用过的地址,而比较巧的是,这台主机正是我申请的,记得当时,眼睁睁地看着小哥哥把地址给敲上去......
好吧,此事已经过去,损失不太惨重,但也不得不引起我们的思考,(其实主要是反省),我们的网络由网工负责,而虚拟机的IP地址又交由其它人在管理,难免出错,作为一名经验丰富的蜘蛛侠,我提供了一个脚本给小哥:
import os
arplist = []
swiplist = ['10.93.1.1','10.30.0.254']
ipaddr = input('输入要查询的IP地址或者MAC(格式xx:xx:xx:xx:xx:xx)地址:')
def snmpwalk(host,fuc):
result = os.popen('snmpwalk -v 2c -c public %s %s'%(host,fuc)).read().split('n')
return result
for x in swiplist:
arplist += snmpwalk(x,'1.3.6.1.2.1.4.22.1.2')
for y in arplist:
if ipaddr in y:
print('n',y,'n')
exit()
简单好用,部署方法:开启核心交换机的snmp功能,只读community默认的public。
思科交换机开启方法:
snmp-server community read RO public
H3C交换机开启方法:
snmp-agent
snmp-agent community read public
然后,将上述脚本保存为py文件,在有python环境并已安装snmpwalk的电脑上运行就行啦。
重点说说原理:
交换机可以通过SNMP来查询到交换机的ARP表,这些表象中就包括IP地址与MAC地址的绑定关系,此脚本是将查询到的ARP结果进行筛选,如果输入的iP或者MAC已经存在于核心交换机的ARP表中,则说明该地址已经被使用,不可再用,如果没有,则显示空白。
地址重复的情况,执行结果如下:
地址不重复的情况,执行结果如下:
好了,今天就到这里,欢迎给我留言。