Skip to content

Simple Python DHCP Library. DHCP Packet-Parsing/Client/Server

License

Notifications You must be signed in to change notification settings

imgurbot12/pydhcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pydhcp

PyPI version Python versions License: MIT Made with Love

Simple Python DHCP Library. DHCP Packet-Parsing/Client/Server

Installation

pip install pydhcp3

DHCPv4 Examples

Packet Parsing

from pydhcp.v4 import Message

hex = \
    '0101060000003d1d0000000000000000000000000000000000000000000b8201fc4200' +\
    '0000000000000000000000000000000000000000000000000000000000000000000000' +\
    '0000000000000000000000000000000000000000000000000000000000000000000000' +\
    '0000000000000000000000000000000000000000000000000000000000000000000000' +\
    '0000000000000000000000000000000000000000000000000000000000000000000000' +\
    '0000000000000000000000000000000000000000000000000000000000000000000000' +\
    '0000000000000000000000000000000000000000000000000000638253633501013d07' +\
    '01000b8201fc4232040000000037040103062aff00000000000000'

raw     = bytes.fromhex(hex)
message = Message.unpack(raw)
print(message)

Client

from pydhcp.v4 import Message
from pydhcp.v4.client import Client, new_message_id

mac    = 'aa:bb:cc:dd:ee:ff'
client = Client(interface=None)

# send crafted messages
id       = new_message_id()
hwaddr   = bytes.fromhex(mac.replace(':', ''))
request  = Message.discover(id, hwaddr)
response = client.request(request)
print(response)

# or simplify the standard network assignment request process
record = client.request_assignment(mac)
print(record)

Server

import logging
from ipaddress import IPv4Address, IPv4Network

from pyserve import listen_udp_threaded

from pydhcp.v4.server import Server
from pydhcp.v4.server.backend import MemoryBackend, CacheBackend

# prepare simple memory backend as base provider
backend = MemoryBackend(
    network=IPv4Network('192.168.1.0/24'),
    gateway=IPv4Address('192.168.1.1'),
    dns=[IPv4Address('8.8.8.8'), IPv4Address('8.8.4.4')],
)

# wrap backend w/ cache (not really useful here but for non-memory backends)
backend = CacheBackend(backend)

# configure optional logger for server implementaion
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('myserver')
logger.setLevel(logging.INFO)

# launch server and run forever using pyserve
listen_udp_threaded(
    address=('0.0.0.0', 67),
    factory=Server,
    allow_broadcast=True,
    backend=backend,
    logger=logger,
    server_id=IPv4Address('192.168.1.1') # dhcp server address
)

About

Simple Python DHCP Library. DHCP Packet-Parsing/Client/Server

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages