视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用python检测某网段已用ip和未使用的ip的方法
2020-11-27 14:25:01 责编:小采
文档


借鉴了前辈的博客,然后自己加了很多东西。

其中用到了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 /dev/sda1 18G 11G 5.8G 65% / tmpfs 495M 0 495M 0% /dev/shm '

#获取命令错误输出结果,通过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 '

@获取错误输出的其他方法还有: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("33[1;32;40m %s is UP 33[0m") % (ip)

f=file('/tmp/alive_ip.txt','a')

f.write('%s ' %ip)

f.close()

alive_ip=alive_ip+1

print "alive_ip count is %d" % alive_ip

return alive_ip

else:

print "33[31m %s is DOWN33[0m" % (ip)

f=file('/tmp/dead_ip.txt','a')

f.write('%s ' %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

下载本文
显示全文
专题