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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


本文出自 “我是卖报的dba” 博客,请务必保留此出处http://lijiajun.blog.51cto.com/9530479/1908724

以上是关于python 检测某网段已用ip和未使用的ip的主要内容,如果未能解决你的问题,请参考以下文章

[shell]通过ping检测整个网段IP的网络状态脚本

shell 脚本检测某网段中监听80端口 有多少

检测当前网段哪些IP是在线的

CENTOS 7 内网网段在用IP地址检测Shell脚本优化版

Linux下检测IP地址冲突及解决方法

Tesseract OCR 无法检测到不同的字体大小和未水平对齐的字母