:param pool: the range of addresses to distribute. Can be a Net, a list of IPs or a string (always gives the same IP). :param network: the subnet range :param gw: the gateway IP (can be None) :param nameserver: the DNS server IP (by default, same
(self,
pool: Union[Net, List[str]] = Net("192.168.1.128/25"),
network: str = "192.168.1.0/24",
gw: str = "192.168.1.1",
nameserver: Union[str, List[str]] = None,
domain: Optional[str] = None,
renewal_time: int = 60,
lease_time: int = 1800,
**kwargs)
| 611 | filter = "udp and port 68 and port 67" |
| 612 | |
| 613 | def parse_options(self, |
| 614 | pool: Union[Net, List[str]] = Net("192.168.1.128/25"), |
| 615 | network: str = "192.168.1.0/24", |
| 616 | gw: str = "192.168.1.1", |
| 617 | nameserver: Union[str, List[str]] = None, |
| 618 | domain: Optional[str] = None, |
| 619 | renewal_time: int = 60, |
| 620 | lease_time: int = 1800, |
| 621 | **kwargs): |
| 622 | """ |
| 623 | :param pool: the range of addresses to distribute. Can be a Net, |
| 624 | a list of IPs or a string (always gives the same IP). |
| 625 | :param network: the subnet range |
| 626 | :param gw: the gateway IP (can be None) |
| 627 | :param nameserver: the DNS server IP (by default, same than gw). |
| 628 | This can also be a list. |
| 629 | :param domain: the domain to advertise (can be None) |
| 630 | |
| 631 | Other DHCP parameters can be passed as kwargs. See DHCPOptions in dhcp.py. |
| 632 | For instance:: |
| 633 | |
| 634 | dhcpd(pool=Net("10.0.10.0/24"), network="10.0.0.0/8", gw="10.0.10.1", |
| 635 | classless_static_routes=["1.2.3.4/32:9.8.7.6"]) |
| 636 | |
| 637 | Other example with different options:: |
| 638 | |
| 639 | dhcpd(pool=Net("10.0.10.0/24"), network="10.0.0.0/8", gw="10.0.10.1", |
| 640 | nameserver=["8.8.8.8", "4.4.4.4"], domain="DOMAIN.LOCAL") |
| 641 | """ |
| 642 | self.domain = domain |
| 643 | netw, msk = (network.split("/") + ["32"])[:2] |
| 644 | msk = itom(int(msk)) |
| 645 | self.netmask = ltoa(msk) |
| 646 | self.network = ltoa(atol(netw) & msk) |
| 647 | self.broadcast = ltoa(atol(self.network) | (0xffffffff & ~msk)) |
| 648 | self.gw = gw |
| 649 | if nameserver is None: |
| 650 | self.nameserver = (gw,) |
| 651 | elif isinstance(nameserver, str): |
| 652 | self.nameserver = (nameserver,) |
| 653 | else: |
| 654 | self.nameserver = tuple(nameserver) |
| 655 | |
| 656 | if isinstance(pool, str): |
| 657 | pool = Net(pool) |
| 658 | if isinstance(pool, Iterable): |
| 659 | pool = [k for k in pool if k not in [gw, self.network, self.broadcast]] |
| 660 | pool.reverse() |
| 661 | if len(pool) == 1: |
| 662 | pool, = pool |
| 663 | self.pool = pool |
| 664 | self.lease_time = lease_time |
| 665 | self.renewal_time = renewal_time |
| 666 | self.leases = {} |
| 667 | self.kwargs = kwargs |
| 668 | |
| 669 | def is_request(self, req): |
| 670 | if not req.haslayer(BOOTP): |