Удаляем старые ненужные DHCP-резервации IP-адресов

  • Tutorial
Иногда в крупных организациях нужно провести ревизию свободных IP-адресов. Пользователи приезжают на место/уезжают/увольняются, IP адреса остаются зарезервированны хотя за ними уже никого нет. Поиском таких «мертвых душ» и займемся.

Рассмотрим пример, как получаются отчеты из логов MS DHCP.

Технология формирования отчетов по использованию адресного пространства состоит из двух частей:

1) отделение событий DHCP renew и

2) SQL-обработка.

В папке \\dhcp_server\c$\Windows\System32\dhcp лежат логи DHCP-сервера. Их копии нужно собрать в одну папку на локальном или сетевом диске. Например, в c:\tmp

Из этих файлов можно вытащить все события обновления dhcp lease renew:

cmd

C:

cd c:\tmp\


1) На первой стадии выделяем значимые строки. Перечислите через запятую все имена файлов *.log, которые нужно обработать. Можно собрать файлы за несколько недель, переименовав их как-нибудь.

c:\tmp>for /f "tokens=1,2,3,4,5,6,7,8 delims=," %a in (DhcpSrvLog-Mon.log,DhcpSrvLog-Tue.log,DhcpSrvLog-Wed.log,DhcpSrvLog-Thu.log,DhcpSrvLog-Fri.log,DhcpSrvLog-Sat.log,DhcpSrvLog-Sun.log) do if [%e] NEQ [] echo %b,%c,%d,%e,%f,%g >> text.csv

2) Добавить в первую строчку файла text2.csv заголовок «Date,Time,Description,IP,Hostname,MAC», остальные строки заполнить событиями renew:

c:\tmp>echo Date,Time,Description,IP,Hostname,MAC >> text2.csv

c:\tmp>for /f "tokens=1,2,3,4,5,6 delims=," %a in (text.csv) do if "%c" EQU "Renew" echo %a,%b,%c,%d,%e,%f >> text2.csv

Можно хранить text2.csv за каждую неделю и собирать в один файл конкатенацией. Если, допустим, нужно проверить что адрес не использовался целый месяц, полгода и т.д, то нужно хранить файлы text2.csv за этот период и склеивать перед следующей операцией.

3) формирование отчета:

c:\tmp >"c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -i:csv -o:TPL -tpl:dhcp2.tpl "SELECT IP, hostname, mac, max(to_timestamp(add(add(Date, ' '),time), 'MM/dd/yy HH:mm:ss')) as timestamp, EXTRACT_TOKEN(ip, 0, '.') as octet1, EXTRACT_TOKEN(ip, 1, '.') as octet2, EXTRACT_TOKEN(ip, 2, '.') as octet3, EXTRACT_TOKEN(ip, 3, '.') as octet4, add(strrepeat('0',sub(3, to_int(strlen(octet4)))),octet4) as octet4lz, add(strrepeat('0',sub(3, to_int(strlen(octet3)))),octet3) as octet3lz INTO text2.html FROM text2.csv group by IP,mac,hostname order by octet1,octet2,octet3lz,octet4lz"

Получится файл text2.html, в котором можно увидеть «живые» компьютеры, получающие адреса через DHCP.

Если заменить "-o:TPL -tpl:dhcp2.tpl " на "-o:CSV", «text2.html» на «b8.csv», то выходной файл можно импортировать в excel.

"c:\Program Files (x86)\Log Parser 2.2\LogParser.exe" -i:csv -o:CSV "SELECT IP, hostname, mac, max(to_timestamp(add(add(Date, ' '),time), 'MM/dd/yy HH:mm:ss')) as timestamp, EXTRACT_TOKEN(ip, 0, '.') as octet1, EXTRACT_TOKEN(ip, 1, '.') as octet2, EXTRACT_TOKEN(ip, 2, '.') as octet3, EXTRACT_TOKEN(ip, 3, '.') as octet4, add(strrepeat('0',sub(3, to_int(strlen(octet4)))),octet4) as octet4lz, add(strrepeat('0',sub(3, to_int(strlen(octet3)))),octet3) as octet3lz INTO b8.csv FROM text2.csv group by IP,mac,hostname order by octet1,octet2,octet3lz,octet4lz"

LogParser качать тут:

www.microsoft.com/en-us/download/details.aspx?id=24659
Share post

Comments 13

    0
    у нас DHCP записи хранятся в MySQL и формируется корректный файл для dhcpd c привязкой IP к MAC.
    я добавил поле в таблице MySQL и заношу туда скриптом из логов dhcpd дату последнего «забирания» клиентом IP адреса и адреса маршрутов и DNS и тд.
    мёртвые души потом ищу SQL запросами и периодически делаем чистку.
      0
      А это у вас самописное что-то или какой-то отдельный продукт?
        0
        Сейчас я нашёл массу готовых продуктов в Интернете, но у нас используется старое-старое с 2003 года точно — самописное веб решение на базе Apache + MySQL + Perl + dhcpd. Куча минусов =), но работает как часы и влом менять.
        Правда в статье пишется о MS Windows платформе, а у нас FreeBSD на серверах.
      +5
      Автор, это разве годно для хабра?

      Читать-же невозможно, вырви глаз…
      Где комментарии, почему не указали, что парсите логи от Windows 2003?
      Например для 2008 R2 заголовок выглядит так

      ID,Date,Time,Description,IP Address,Host Name,MAC Address,User Name, TransactionID, QResult,Probationtime, CorrelationID,Dhcid

      для 2012 и того больше:
      ID,Date,Time,Description,IP Address,Host Name,MAC Address,User Name, TransactionID, QResult,Probationtime, CorrelationID,Dhcid,VendorClass(Hex),VendorClass(ASCII),UserClass(Hex),UserClass(ASCII),RelayAgentInformation

      В папке \\dhcp_server\c$\Windows\System32\dhcp лежат логи DHCP-сервера.
      А у меня они лежат на диске S:\dhcp\logs — почему бы Вам не сообщить людям где смотреть расположение логов?

      Понятно, что всё это можно найти, но Вы не предложили альтернатив.

      Ну и последний гвоздь — задача «Удаляем старые ненужные DHCP-резервации IP-адресов» не решена. Нет автоматизации удаления. Необходимо изменить топик на «Вытаскиваем живые lease'ы из логов MS DHCP 2003»
        0
        «IP адреса остаются зарезервированны хотя за ними уже никого нет»
        Разве не проще выдавать адреса когда они нужны, и не резервировать напрасно? Ну на день выдавать, но навсегда-то зачем?
          0
          У нас при огромном количестве компов на заводе используется привязка IP к MAC. Не всегда удобно динамическое выделение IP из пула.
            0
            Я могу понять — для сервера надо прописать постоянный IP — чтобы с iptables не мучаться. А для остальных-то зачем?
              +1
              Например у нас сейчас активных записей в DHCP — 3236.
              Разные подсети в разных VLAN. Наш сетевой администратор со своей стороны и сделал бы свои сетевые махинации с привязкой портов с VLAN… не буду дальше писать… не шарю просто.
              Но мне как системному администратору как реализовать на сервере DHCP динамическое выделение IP, но из нужной подсети?
              И самое главное, в логах мелькают IP, которые постоянны для конкретного компа и в случае инцидентов, легко выйти на конкретного пользователя.
                0
                вот теперь понятно, спасибо.
          0
          Arpwatch не пробовали использовать?
            0
            Есть такой параметр в настройках DHCP сервера Windows — Lease Duration. Если не ошибаюсь, он как раз и отвечает за время аренды адреса. Поставьте его поменьше и не нужно будет руками подчищать «мёртвые души».
              +1
              Вы не поняли смысл статьи — речь идет о резервации — она на всегда.
                +1
                да, действительно, прошу прощения

            Only users with full accounts can post comments. Log in, please.