dhcpstatus 0.0.5
Python implementation of DHCP status
Keywords: DHCP Status

==============
dhcpstatus
==============

**dhcpstatus** is a pure python implementation of DHCPSTATUS (http://dhcpstatus.sourceforge.net/),
implementing most of its functionalities.

With subnet status operation, **dhcpstatus** will return IP details for each subnet. It will provide:
 1. IP range defined for the subnet
 2. Total number of IPs defined for use
 3. Count of free IPs in the subnet
 4. Count of used IPs in the subnet
 5. IPs leased out from each subnet
 6. MAC address of the host the IP is leased
 7. Hostname of the machine DHCP IP is leased to


Usage **dhcpstatus** command : **dhcpstatus_subnet**
------------------------------------------------------

**dhcpstatus** installation also comes with command style entry point **dhcpstatus_subnet**. You can run **dhcpstatus**
in standalone cli mode using binary **dhcpstatus_subnet**:

.. code:: bash

   $ dhcpstatus_subnet /path/to/dhcp_subnet.conf /path/to/dhcpd.lease

    Subnet               | Netmask              | Low Address          | High Address         | IPs defined     | IPs free        | IPs in use      | IPs                  | MACs                 | Hostname
    10.30.217.0          | 255.255.255.192      | 10.30.217.4          | 10.30.217.62         |              59 |              53 |               6 | 10.30.217.39         | 9c:b6:54:aa:78:c3    | host1
                         |                      |                      |                      |                 |                 |                 | 10.30.217.5          | 9c:b6:54:aa:88:9f    | host2
                         |                      |                      |                      |                 |                 |                 | 10.30.217.21         | 9c:b6:54:aa:8b:07    | host3
                         |                      |                      |                      |                 |                 |                 | 10.30.217.18         | 9c:b6:54:ab:b9:eb    | host4
                         |                      |                      |                      |                 |                 |                 | 10.30.217.56         | 9c:b6:54:ab:bb:2f    | host5
                         |                      |                      |                      |                 |                 |                 | 10.30.217.37         | 9c:b6:54:ab:bb:9b    | host6
    10.30.217.64         | 255.255.255.192      | 10.30.217.68         | 10.30.217.126        |              59 |              53 |               6 | 10.30.217.86         | 9c:b6:54:aa:8f:7b    | host7
                         |                      |                      |                      |                 |                 |                 | 10.30.217.100        | 9c:b6:54:73:60:41    | host8
                         |                      |                      |                      |                 |                 |                 | 10.30.217.83         | 9c:b6:54:aa:8b:93    | host9
                         |                      |                      |                      |                 |                 |                 | 10.30.217.114        | 9c:b6:54:aa:8b:0f    | host10
                         |                      |                      |                      |                 |                 |                 | 10.30.217.101        | 9c:b6:54:aa:8e:bf    | host11
                         |                      |                      |                      |                 |                 |                 | 10.30.217.117        | 9c:b6:54:aa:8b:03    | host12
    10.30.241.160        | 255.255.255.248      | 10.30.241.164        | 10.30.241.166        |               3 |               3 |               0 | -                    | -                    | -
    10.30.221.64         | 255.255.255.192      | 10.30.221.68         | 10.30.221.126        |              59 |              54 |               5 | 10.30.221.99         | 70:10:6f:ca:94:74    | host13
                         |                      |                      |                      |                 |                 |                 | 10.30.221.78         | 70:10:6f:ca:90:2c    | host14
                         |                      |                      |                      |                 |                 |                 | 10.30.221.77         | 70:10:6f:ca:8f:2c    | host15
                         |                      |                      |                      |                 |                 |                 | 10.30.221.85         | 70:10:6f:ca:7d:f4    | host16
                         |                      |                      |                      |                 |                 |                 | 10.30.221.69         | 70:10:6f:ca:83:fc    | host17
    10.30.220.0          | 255.255.255.192      | 10.30.220.4          | 10.30.220.62         |              59 |              58 |               1 | 10.30.220.33         | 34:17:eb:e8:06:25    | host18


**dhcpstatus** API usage
-------------------------

.. code:: python

    from dhcpstatus import *
    import pprint

    d=DHCPStatus('/path/to/dhcp_subnet.conf ', ' /path/to/dhcpd.lease')
    status = d.subnet_status()

    pprint.pprint(status)


OR

.. code:: python

    import dhcpstatus
    import pprint

    d=dhcpstatus.DHCPStatus('/path/to/dhcp_subnet.conf ', ' /path/to/dhcpd.lease')
    status = d.subnet_status()

    pprint.pprint(status)


And you can see output as:

.. code:: bash

    {('10.30.217.4', '10.30.217.62'): {'netmask': '255.255.255.192',
                                       'option': {'broadcast-address': '10.30.217.63',
                                                  'domain-name': '"con.dcg02.paypalc3.net"',
                                                  'domain-name-servers': '10.190.18.19,10.190.18.20',
                                                  'routers': '10.30.217.1'},
                                       'pool': {'failover': ('peer',
                                                             '"phx04-dhcp-failover"'),
                                                'range': ('10.30.217.4',
                                                          '10.30.217.62')},
                                       'status': {'Hostname': ['host1',
                                                               'host2',
                                                               'host3',
                                                               'host4',
                                                               'host5',
                                                               'host6'],
                                                  'IPs': ['10.30.217.39',
                                                          '10.30.217.5',
                                                          '10.30.217.21',
                                                          '10.30.217.18',
                                                          '10.30.217.56',
                                                          '10.30.217.37'],
                                                  'IPs defined': 59,
                                                  'IPs free': 53,
                                                  'IPs in use': 6,
                                                  'MACs': ['9c:b6:54:aa:78:c3',
                                                           '9c:b6:54:aa:88:9f',
                                                           '9c:b6:54:aa:8b:07',
                                                           '9c:b6:54:ab:b9:eb',
                                                           '9c:b6:54:ab:bb:2f',
                                                           '9c:b6:54:ab:bb:9b']},
                                       'subnet': '10.30.217.0'},
    ('10.30.217.68', '10.30.217.126'): { 'netmask': '255.255.255.192',
                                         'option': {'broadcast-address': '10.30.217.127',
                                                    'domain-name': '"con.dcg02.paypalc3.net"',
                                                    'domain-name-servers': '10.190.18.19,10.190.18.20',
                                                    'routers': '10.30.217.65'},
                                         'pool': {'failover': ('peer',
                                                               '"phx04-dhcp-failover"'),
                                                  'range': ('10.30.217.68',
                                                            '10.30.217.126')},
                                         'status': {'Hostname': ['host13',
                                                                 'host14',
                                                                 'host15',
                                                                 'host16',
                                                                 'host17',
                                                                 'host18'],
                                                    'IPs': ['10.30.217.86',
                                                            '10.30.217.100',
                                                            '10.30.217.83',
                                                            '10.30.217.114',
                                                            '10.30.217.101',
                                                            '10.30.217.117',],
                                                    'IPs defined': 59,
                                                    'IPs free': 53,
                                                    'IPs in use': 6,
                                                    'MACs': ['9c:b6:54:aa:8f:7b',
                                                             '9c:b6:54:73:60:41',
                                                             '9c:b6:54:aa:8b:93',
                                                             '9c:b6:54:aa:8b:0f',
                                                             '9c:b6:54:aa:8e:bf',
                                                             '9c:b6:54:aa:8b:03']},
                                         'subnet': '10.30.217.64'},
    ('10.30.241.164', '10.30.241.166'): {'netmask': '255.255.255.248',
                                          'option': {'broadcast-address': '10.30.241.167',
                                                     'domain-name': '"con.dcg02.paypalc3.net"',
                                                     'domain-name-servers': '10.190.18.19,10.190.18.20',
                                                     'routers': '10.30.241.161'},
                                          'pool': {'failover': ('peer',
                                                                '"phx04-dhcp-failover"'),
                                                   'range': ('10.30.241.164',
                                                             '10.30.241.166')},
                                          'status': {'Hostname': [],
                                                     'IPs': [],
                                                     'IPs defined': 3,
                                                     'IPs free': 3,
                                                     'IPs in use': 0,
                                                     'MACs': []},
                                          'subnet': '10.30.241.160'}}


Installing **dhcpstatus**
----------------------------

.. code:: bash

    $ pip install dhcpstatus