zoukankan      html  css  js  c++  java
  • 分析dhcp.lease文件,统计DHCP服务器IP自动分配

    #!/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('
    ')[0].split(' ')[1]
        if line.find('starts') <> -1:
            lease_start = line.split('
    ')[0].split(' ')[4:6]
        if line.find('ends') <> -1:
            lease_end = line.split('
    ')[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('
    ')[0].split(' ')[4].split(';')[0]
        if line.find('uid') <> -1:
            pass
        if line.find('client-hostname') <> -1:
            if istatus == 'active':
                client_Hostname= line.split('
    ')[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) +"	" + start_time + "	" + end_time + "	" + diff + "	" + str( MAC )+ "	"  + str(istatus) + "	" + str( client_Hostname )
                alist.append(record)
                lease_IP = ' '
                lease_start = ' '
                lease_end = ' '
                istatus = ' '
                MAC = ' '
                client_Hostname =' '
            else:
                pass
    print  "IP 地址" + "			"  + "获取时间" + "				" + "释放时间" + "				" + " 剩余时间" + "				"  +"MAC地址" + "				" +"是否激活" + "	" + "主机名"
    for ip in alist:
        print ip
    执行:python print_ip.py

     

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

    *** 你必须十分努力,才能看起来毫不费力 ***
  • 相关阅读:
    JS制作蔡徐坤打篮球小游戏(鸡你太美?)
    2019-泰迪杯c题数据处理,WGS-84(世界标准地理坐标系) 转为 BD-09(百度地理坐标系)
    浅谈指令系统---(汇编语言)
    PyGame实现情人节表白利器
    Python-王者荣耀自动刷金币+爬取英雄信息+图片
    SSM-网站前台博客系统制作(2)---完善版Google的Kaptcha
    UML 用例之间的关系
    在配置文件web.xml中配置Struts2的启动信息
    IO异常处理
    设计监听器
  • 原文地址:https://www.cnblogs.com/bigtree2pingping/p/9777150.html
Copyright © 2011-2022 走看看