需求:
由于我们公司内部,ip地址管理混乱,存在ip地址冲突的问题,有些时候设置开发环境的ip地址的时候只是ping一下,并没有统一管理,这里我就使用 python + web.py 搭了一个简单的web站点,达到访问就可以获取到一个可用ip地址的效果,且都通过这一个平台,避免已被使用的ip重复使用,造成ip冲突。
环境搭建:
这里首先在linux服务器上安装python,然后参照http://webpy.org/的文档,去安装web.py模块
代码:
ping.sh
#!/bin/bash
#------------------------------------------
# by gaoyaohua 20161121
# transfer from ping.py
# ping ip return echo
# 0:ok 1:false
#------------------------------------------
ip=$1
result=`ping -c 3 $ip | grep '0 received' | wc -l`
echo $result
ping.py
#!/usr/bin/python
#-------------------------------------
# by gaoyaohua 20161123
# run ping.py ping.sh
#
#-------------------------------------
import web
import subprocess
urls = (
'/ping', 'ping_ip'
)
class ping_ip:
def GET(self):
count = len(open('./iplist.txt','rU').readlines())
outip = ''
ipduan="192.168.2."
for i in range(1,253):
four_ip=str(i)
test_ip = ipduan + four_ip
with open('./iplist.txt','r') as f:
count_test=0
for line in f.readlines():
count_test += 1
linestr = line.strip()
if linestr == test_ip:
break
elif count_test == count:
record = test_ip
ping = subprocess.Popen([r'./ping.sh',record],stdout=subprocess.PIPE)
result = ping.stdout.read()
if result == '1\n':
break
else:
outip=test_ip
break
if outip == '':
continue
else:
return test_ip + " is can be used"
break
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
iplist.txt
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.166
程序逻辑:
python ping.py 运行脚本
ping.py首先进行for循环192.168.2.1到253,然后ip跟iplist.txt中的地址匹配,如果相同,跳出,如果不同,调用ping.sh对ip进行3次ping的测试,如果不通,将ip返回到页面。