您好,欢迎访问一九零五行业门户网

使用python检测某网段已用ip和未使用的ip的方法

借鉴了前辈的博客,然后自己加了很多东西。
其中用到了subprocess模块
>>> import subprocess
>>> p = subprocess.popen('df -h',stdin=subprocess.pipe,stdout=subprocess.pipe,stderr=subprocess.pipe,shell=true)
#获取命令执行结果的返回码,通过wait()函数
>>> p.wait()
0
#获取命令输出结果(标准输出),通过read()方法
>>> p.stdout.read()
'filesystem            size  used avail use% mounted on\n/dev/sda1              18g   11g  5.8g  65% /\ntmpfs                 495m     0  495m   0% /dev/shm\n'
#获取命令错误输出结果,通过read()方法
>>> p.stderr.read()            
''
#为空,说明没有错误输出
#获取错误输出
<subprocess.popen object at 0x7f267528dbd0>
>>> p = subprocess.popen('ls /etc/password',stdin=subprocess.pipe,stdout=subprocess.pipe,stderr=subprocess.pipe,shell=true,close_fds=true)
>>> p.stderr.read()
'ls: cannot access /etc/password: no such file or directory\n'
@获取错误输出的其他方法还有:read(),readline(),readlines(),close(),write()和writelines()等.
#!/usr/bin/env python
#_*_ coding:utf8 _*_
# by lijiajun
import re,subprocess,os,sys
net_region='192.168.3'
print(#########################################################)
print(#此脚本主要基于ping,测试某网段已用ip和未使用的ip       #)
print(#分别将其保存到/tmp/alive_ip.txt                        #)
print(#以及/tmp/dead_ip.txt                                   #)
print(#########################################################)
print( )
if os.path.isfile(/tmp/alive_ip.txt):  
os.popen(mv /tmp/alive_ip.txt /tmp/alive_ip.txt.old)
print you can see the used ip in this file : /tmp/alive_ip.txt
if os.path.isfile(/tmp/dead_ip.txt):  
os.popen(mv /tmp/dead_ip.txt /tmp/dead_ip.txt.old)
print you can see the unused ip in this file : /tmp/dead_ip.txt
print( )
dead_ip=0
alive_ip=0
def check_alive(ip,count,timeout):
global alive_ip
global dead_ip
cmd='ping -c %d -w %d %s' % (count,timeout,ip)
p=subprocess.popen(cmd,
stdin=subprocess.pipe,
stdout=subprocess.pipe,
stderr=subprocess.pipe,
shell=true)
result=p.stdout.read()
regx=re.findall('100% packet loss',result)
if len(regx)==0:
print(\033[1;32;40m %s is up \033[0m)  % (ip)
f=file('/tmp/alive_ip.txt','a')
f.write('%s\n' %ip)
f.close()
alive_ip=alive_ip+1
print alive_ip count is %d % alive_ip
return alive_ip
else:
print \033[31m %s is down\033[0m % (ip)
                f=file('/tmp/dead_ip.txt','a')
                f.write('%s\n' %ip)
f.close()
dead_ip=dead_ip+1
print dead_ip count is %d % dead_ip
return dead_ip
if name==main:
#f=file('/tmp/iplist.txt')
for i in range(1,255):
ip='%s.%s' % (net_region,i)
print ip
check_alive(ip,1,1)
print (  )
print final dead_ip count is %d % dead_ip
print final alived_ip count is %d % alive_ip
以上就是使用python检测某网段已用ip和未使用的ip的方法的详细内容。
其它类似信息

推荐信息