Beispiel #1
0
    def __init__(self,
                 dns_servers: Iterable[IPv6Address],
                 always_send: bool = False):
        option = RecursiveNameServersOption(dns_servers=dns_servers)
        option.validate()

        super().__init__(option, always_send=always_send)
Beispiel #2
0
 def setUp(self):
     self.option_bytes = bytes.fromhex('00170020'
                                       '20010db8000000000000000000000001'
                                       '20010db8000000000000000000000002')
     self.option_object = RecursiveNameServersOption(dns_servers=[
         IPv6Address('2001:db8::1'),
         IPv6Address('2001:db8::2')
     ])
     self.parse_option()
Beispiel #3
0
    def test_bad_option_length(self):
        with self.assertRaisesRegex(ValueError, 'length must be a multiple of 16'):
            RecursiveNameServersOption.parse(bytes.fromhex('0017000f20010db8000000000000000000000001'))

        with self.assertRaisesRegex(ValueError, 'longer than the available buffer'):
            RecursiveNameServersOption.parse(bytes.fromhex('0017001120010db8000000000000000000000001'))

        with self.assertRaisesRegex(ValueError, 'length must be a multiple of 16'):
            RecursiveNameServersOption.parse(bytes.fromhex('0017001120010db800000000000000000000000100'))
Beispiel #4
0
    def test_bad_option_length(self):
        with self.assertRaisesRegex(ValueError,
                                    'length must be a multiple of 16'):
            RecursiveNameServersOption.parse(
                bytes.fromhex('0017000f20010db8000000000000000000000001'))

        with self.assertRaisesRegex(ValueError,
                                    'longer than the available buffer'):
            RecursiveNameServersOption.parse(
                bytes.fromhex('0017001120010db8000000000000000000000001'))

        with self.assertRaisesRegex(ValueError,
                                    'length must be a multiple of 16'):
            RecursiveNameServersOption.parse(
                bytes.fromhex('0017001120010db800000000000000000000000100'))
Beispiel #5
0
    def combine(
        self, existing_options: Iterable[RecursiveNameServersOption]
    ) -> RecursiveNameServersOption:
        """
        Combine multiple options into one.

        :param existing_options: The existing options to include name servers from
        :return: The combined option
        """
        addresses = []

        # Add from existing options first
        for option in existing_options:
            for address in option.dns_servers:
                if address not in addresses:
                    addresses.append(address)

        # Then add our own
        for address in self.option.dns_servers:
            if address not in addresses:
                addresses.append(address)

        # And return a new option with the combined addresses
        return RecursiveNameServersOption(dns_servers=addresses)
        IAPDOption(iaid=bytes.fromhex('c43cb2f1'),
                   options=[
                       IAPrefixOption(
                           prefix=IPv6Network('2001:db8:ffcc:fe00::/56'),
                           preferred_lifetime=375,
                           valid_lifetime=600),
                   ]),
        ClientIdOption(duid=LinkLayerDUID(hardware_type=1,
                                          link_layer_address=bytes.fromhex(
                                              '3431c43cb2f1'))),
        ServerIdOption(duid=LinkLayerTimeDUID(hardware_type=1,
                                              time=488458703,
                                              link_layer_address=bytes.fromhex(
                                                  '00137265ca42'))),
        ReconfigureAcceptOption(),
        RecursiveNameServersOption(
            dns_servers=[IPv6Address('2001:4860:4860::8888')]),
    ],
)

reply_packet = codecs.decode(
    '07f350d600030028c43cb2f100000000'
    '000000000005001820010db8ffff0001'
    '000c00000000e09c0000017700000258'
    '00190029c43cb2f10000000000000000'
    '001a001900000177000002583820010d'
    'b8ffccfe000000000000000000000100'
    '0a000300013431c43cb2f10002000e00'
    '0100011d1d49cf00137265ca42001400'
    '00001700102001486048600000000000'
    '0000008888', 'hex')
Beispiel #7
0
    def __init__(self, dns_servers: [IPv6Address]):
        option = RecursiveNameServersOption(dns_servers=dns_servers)
        option.validate()

        super().__init__(option)
Beispiel #8
0
    def __init__(self, dns_servers: Iterable[IPv6Address], always_send: bool = False):
        option = RecursiveNameServersOption(dns_servers=dns_servers)
        option.validate()

        super().__init__(option, always_send=always_send)