• 分析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

    *** 你必须十分努力,才能看起来毫不费力 ***
  • 相关阅读:
    Hihocoder 1275 扫地机器人 计算几何
    CodeForces 771C Bear and Tree Jumps 树形DP
    CodeForces 778D Parquet Re-laying 构造
    CodeForces 785E Anton and Permutation 分块
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale 二分
    Hexo Next 接入 google AdSense 广告
    如何统计 Hexo 网站的访问地区和IP
    Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple Task Points
    通过ODBC接口访问人大金仓数据库
  • 原文地址:https://www.cnblogs.com/bigtree2pingping/p/9777150.html
Copyright © 2020-2023  润新知