#!/usr/bin/env python
# coding=utf-8
import string
import time,datetime
class TIMEFORMAT:
def __init__(self, time_string="1970-1-1 00:00:00"):
self.time_string = self._format_time_string(time_string)
def _format_time_string(self, time_string):
return time.strftime("%Y-%m-%d %H:%M:%S", self.get_struct(time_string))
@property
def time_struct(self):
return self.get_struct(self.time_string)
def get_struct(self, time_string):
return time.localtime(self.get_seconds(time_string))
@property
def seconds(self):
return self.get_seconds(self.time_string)
def get_seconds(self, time_string):
d = datetime.datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S")
return time.mktime(d.timetuple())
def get_string(self, time_sec):
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time_sec))
# 对于中国的时间,是1970-01-01 08:00:00
def check_diff_time(self, t1, t2):
sec1 = int(self.get_seconds(t1))
sec2 = int(self.get_seconds(t2))
if sec1 > sec2:
secdiff = sec1 - sec2
else:
secdiff = sec2 - sec1
d = self.get_struct(self.get_string(secdiff))
day = d.tm_mday
hour = d.tm_hour
if d.tm_hour < 8:
day -= 1
hour = 24 + (d.tm_hour - 8)
else:
hour = d.tm_hour - 8
return {
"year" :d.tm_year - 1970,
"month" :d.tm_mon - 1,
"day" : day - 1,
"hour" : hour,
"min" : d.tm_min,
"sec" : d.tm_sec,
}
#######################################
alist=[]
lease_IP=' '
lease_start=' '
lease_end=' '
istatus=' '
MAC=' '
client_Hostname=' '
# 修改以下路径
f=open('/var/lib/dhcpd/dhcpd.leases')
lines = f.readlines()
f.close()
#########################################
for line in lines:
if line.find('lease') <> -1:
lease_IP = line.split('\n')[0].split(' ')[1]
if line.find('starts') <> -1:
lease_start = line.split('\n')[0].split(' ')[4:6]
if line.find('ends') <> -1:
lease_end = line.split('\n')[0].split(' ')[4:6]
if line.find('binding state active') <> -1:
istatus='active'
if line.find('next binding state') <> -1:
pass
if line.find('hardware ethernet') <> -1:
MAC=line.split('\n')[0].split(' ')[4].split(';')[0]
if line.find('uid') <> -1:
pass
if line.find('client-hostname') <> -1:
if istatus == 'active':
client_Hostname= line.split('\n')[0].split(' ')[3].split('"')[1]
start_time = str(lease_start[0]) +" " + str(lease_start[1]).rstrip(';')
end_time = str(lease_end[0]) + " " + str(lease_end[1]).rstrip(';')
start_time_format = time.strftime("%Y-%m-%d %H:%M:%S",time.strptime(start_time,"%Y/%m/%d %H:%M:%S"))
end_time_format = time.strftime("%Y-%m-%d %H:%M:%S",time.strptime(end_time,"%Y/%m/%d %H:%M:%S"))
t1 = TIMEFORMAT("%s"%(start_time_format))
t2 = TIMEFORMAT("%s"%(end_time_format))
d = t1.check_diff_time(t1.time_string, t2.time_string)
diff = str(d["year"]) + "年" + str(d["month"]) + "月" + str(d["day"]) + "天 " + str(d["hour"])+ "时" + str(d["min"]) + "分" + str(d["sec"]) + "秒"
record = str(lease_IP) +"\t" + start_time + "\t" + end_time + "\t" + diff + "\t" + str( MAC )+ "\t" + str(istatus) + "\t" + str( client_Hostname )
alist.append(record)
lease_IP = ' '
lease_start = ' '
lease_end = ' '
istatus = ' '
MAC = ' '
client_Hostname =' '
else:
pass
print "IP 地址" + "\t\t\t" + "获取时间" + "\t\t\t\t" + "释放时间" + "\t\t\t\t" + " 剩余时间" + "\t\t\t\t" +"MAC地址" + "\t\t\t\t" +"是否激活" + "\t" + "主机名"
for ip in alist:
print ip
执行:python print_ip.py

提取IP和主机名,并排序
./print_ip.py | awk 'NR!=1{print $1,$5}' OFS="\t\t"  | sort -u -t. -k3,3n -k4,

分析dhcp.lease文件,统计DHCP服务器IP自动分配的更多相关文章

  1. 日志文件 统计 网站PV IP

    1. 安装rrdtool yum install rrdtool 2. 创建 rrdtool 数据库 rrdtool create /opt/local/rrdtool/jicki.rrd -s 30 ...

  2. DHCP服务自动分配IP地址原理

    转载自:http://blog.csdn.net/lycb_gz/article/details/8499559 DHCP在提供服务时,DHCP客户端是以UDP 68号端口进行数据传输的,而DHCP服 ...

  3. 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程

    第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...

  4. DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习

    相关学习资料 http://www.rfc-editor.org/rfc/rfc2131.txt http://baike.baidu.com/view/7992.htm?fromtitle=DHCP ...

  5. [DHCP服务]——一个验证DHCP原理实验(VMware)

    大致实验拓扑图 DHCP Server端的配置 1. 安装DHCP # yum -y install dhcp 2. 拷贝配置文件 # /dhcpd.conf.sample /etc/dhcp/dhc ...

  6. 因客户机IP与服务器IP不在同一网段导致无盘客户机开机卡tftp,提示:PXE-E11: ARP timeout

    61的地址需要在上面的地址范围段之内 问题现象] 无盘客户机启动获取DHCP后卡在tftp界面提示:PXE-E11: ARP timeout,如下图: [原因说明] 客户机的IP地址与服务器IP地址不 ...

  7. 服务器IP配置功能实现小结

    1. 服务器网卡配置文件 /etc/sysconfig/network/ifcfg-***(eth0) linux-f1s9:/etc/sysconfig/network # cat ifcfg-et ...

  8. 如何修改因Informatica 8.6服务器IP而造资料库无法访问的问题

    原因分析解决及如何避免(PowerCenter 8.6.1) 前几天同事安装了个PowerCenter8.6.1做测试,出去了几天回来后Administration Console无法登入了.同事用的 ...

  9. 如何变更站点 AD 域服务器IP地址

    在 winserver 2012  单森林单域,多站点环境中,想把某一个站点AD 域服务器IP地址更改,要如何操作,才能保证客户端正常运行,不影响客户端的运行.有些朋友也经常提出类似问题. 想在不影响 ...

随机推荐

  1. 使用dom4j 解析xml文件

    //使用dom4j 解析xml文件,升级版,dom4j是对dom的封装 //重点 package com.offcn.utils; import java.io.File; import java.i ...

  2. SpringBoot 2.X集成Hive-jdbc 3.1.1

    最近公司有一个需求,需求的内容是根据用户页面选择的参数条件查询Hive,数量量大致是300万以内,要求3秒响应.使用的其它的技术就不要说了,先说说SpingBoot集成Hive-jdbc吧,网上虽然有 ...

  3. .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...

  4. Spring Boot 2.x(十一):AOP实战--打印接口日志

    接口日志有啥用 在我们日常的开发过程中,我们可以通过接口日志去查看这个接口的一些详细信息.比如客户端的IP,客户端的类型,响应的时间,请求的类型,请求的接口方法等等,我们可以对这些数据进行统计分析,提 ...

  5. 【设计模式+原型理解】第三章:javascript五种继承父类方式

    [前言] 我们都知道,面向对象(类)的三大特征:封装.继承.多态 继承:子类继承父类的私有属性和公有方法 封装:把相同的代码写在一个函数中 多态: ->重载:JS严格意义上是没有重载,但可以通过 ...

  6. Java基础系列-Collector和Collectors

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10748925.html 一.概述 Collector是专门用来作为Stream的coll ...

  7. 云计算OpenStack:云计算介绍及组件安装(一)--技术流ken

    云计算介绍 当用户能够通过互联网方便的获取到计算.存储等服务时,我们比喻自己使用到了“云计算”,云计算并不能被称为是一种计算技术,而更像是一种服务模式.每个运维人员心里都有一个对云计算的理解,而最普遍 ...

  8. spring通知执行的顺序

    点击下载本示例相关代码 关于spring aop的具体使用,暂时不在这里讲解,后面会特定来讲解,本次主要探讨spring中通知执行的顺序. spring中通知分为以下几种: before:前置通知,在 ...

  9. c#解决TCP“粘包”问题

    一:TCP粘包产生的原理 1,TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能 ...

  10. 解释器模式 Interpreter 行为型 设计模式(十九)

      解释器模式(Interpreter)   考虑上图中计算器的例子 设计可以用于计算加减运算(简单起见,省略乘除),你会怎么做?    你可能会定义一个工具类,工具类中有N多静态方法 比如定义了两个 ...