Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.216.28
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
lib /
google-cloud-sdk /
lib /
third_party /
dns /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2026-06-08 18:08
rdtypes
[ DIR ]
drwxr-xr-x
2026-06-08 18:08
LICENSE
1.49
KB
-rw-r--r--
1980-01-01 08:00
__init__.py
1.37
KB
-rw-r--r--
1980-01-01 08:00
_compat.py
1.47
KB
-rw-r--r--
1980-01-01 08:00
dnssec.py
16.12
KB
-rw-r--r--
1980-01-01 08:00
e164.py
3.67
KB
-rw-r--r--
1980-01-01 08:00
edns.py
7.25
KB
-rw-r--r--
1980-01-01 08:00
entropy.py
4.66
KB
-rw-r--r--
1980-01-01 08:00
exception.py
4.76
KB
-rw-r--r--
1980-01-01 08:00
flags.py
2.86
KB
-rw-r--r--
1980-01-01 08:00
grange.py
2.01
KB
-rw-r--r--
1980-01-01 08:00
hash.py
1.29
KB
-rw-r--r--
1980-01-01 08:00
inet.py
3.3
KB
-rw-r--r--
1980-01-01 08:00
ipv4.py
2.05
KB
-rw-r--r--
1980-01-01 08:00
ipv6.py
5.4
KB
-rw-r--r--
1980-01-01 08:00
message.py
40.49
KB
-rw-r--r--
1980-01-01 08:00
name.py
30.53
KB
-rw-r--r--
1980-01-01 08:00
namedict.py
3.87
KB
-rw-r--r--
1980-01-01 08:00
node.py
6.2
KB
-rw-r--r--
1980-01-01 08:00
opcode.py
2.77
KB
-rw-r--r--
1980-01-01 08:00
query.py
23.14
KB
-rw-r--r--
1980-01-01 08:00
rcode.py
3.53
KB
-rw-r--r--
1980-01-01 08:00
rdata.py
14.11
KB
-rw-r--r--
1980-01-01 08:00
rdataclass.py
3.14
KB
-rw-r--r--
1980-01-01 08:00
rdataset.py
11.19
KB
-rw-r--r--
1980-01-01 08:00
rdatatype.py
5.78
KB
-rw-r--r--
1980-01-01 08:00
renderer.py
10.57
KB
-rw-r--r--
1980-01-01 08:00
resolver.py
49.03
KB
-rw-r--r--
1980-01-01 08:00
reversename.py
3.21
KB
-rw-r--r--
1980-01-01 08:00
rrset.py
6.01
KB
-rw-r--r--
1980-01-01 08:00
set.py
7.14
KB
-rw-r--r--
1980-01-01 08:00
tokenizer.py
17.62
KB
-rw-r--r--
1980-01-01 08:00
tsig.py
7.63
KB
-rw-r--r--
1980-01-01 08:00
tsigkeyring.py
1.77
KB
-rw-r--r--
1980-01-01 08:00
ttl.py
2.29
KB
-rw-r--r--
1980-01-01 08:00
update.py
10.1
KB
-rw-r--r--
1980-01-01 08:00
version.py
1.37
KB
-rw-r--r--
1980-01-01 08:00
wiredata.py
3.66
KB
-rw-r--r--
1980-01-01 08:00
zone.py
41.39
KB
-rw-r--r--
1980-01-01 08:00
Save
Rename
# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license # Copyright (C) 2001-2017 Nominum, Inc. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose with or without fee is hereby granted, # provided that the above copyright notice and this permission notice # appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """DNS nodes. A node is a set of rdatasets.""" from io import StringIO import dns.rdataset import dns.rdatatype import dns.renderer class Node(object): """A Node is a set of rdatasets.""" __slots__ = ['rdatasets'] def __init__(self): #: the set of rdatsets, represented as a list. self.rdatasets = [] def to_text(self, name, **kw): """Convert a node to text format. Each rdataset at the node is printed. Any keyword arguments to this method are passed on to the rdataset's to_text() method. *name*, a ``dns.name.Name`` or ``text``, the owner name of the rdatasets. Returns a ``text``. """ s = StringIO() for rds in self.rdatasets: if len(rds) > 0: s.write(rds.to_text(name, **kw)) s.write(u'\n') return s.getvalue()[:-1] def __repr__(self): return '<DNS node ' + str(id(self)) + '>' def __eq__(self, other): # # This is inefficient. Good thing we don't need to do it much. # for rd in self.rdatasets: if rd not in other.rdatasets: return False for rd in other.rdatasets: if rd not in self.rdatasets: return False return True def __ne__(self, other): return not self.__eq__(other) def __len__(self): return len(self.rdatasets) def __iter__(self): return iter(self.rdatasets) def find_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE, create=False): """Find an rdataset matching the specified properties in the current node. *rdclass*, an ``int``, the class of the rdataset. *rdtype*, an ``int``, the type of the rdataset. *covers*, an ``int``, the covered type. Usually this value is dns.rdatatype.NONE, but if the rdtype is dns.rdatatype.SIG or dns.rdatatype.RRSIG, then the covers value will be the rdata type the SIG/RRSIG covers. The library treats the SIG and RRSIG types as if they were a family of types, e.g. RRSIG(A), RRSIG(NS), RRSIG(SOA). This makes RRSIGs much easier to work with than if RRSIGs covering different rdata types were aggregated into a single RRSIG rdataset. *create*, a ``bool``. If True, create the rdataset if it is not found. Raises ``KeyError`` if an rdataset of the desired type and class does not exist and *create* is not ``True``. Returns a ``dns.rdataset.Rdataset``. """ for rds in self.rdatasets: if rds.match(rdclass, rdtype, covers): return rds if not create: raise KeyError rds = dns.rdataset.Rdataset(rdclass, rdtype) self.rdatasets.append(rds) return rds def get_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE, create=False): """Get an rdataset matching the specified properties in the current node. None is returned if an rdataset of the specified type and class does not exist and *create* is not ``True``. *rdclass*, an ``int``, the class of the rdataset. *rdtype*, an ``int``, the type of the rdataset. *covers*, an ``int``, the covered type. Usually this value is dns.rdatatype.NONE, but if the rdtype is dns.rdatatype.SIG or dns.rdatatype.RRSIG, then the covers value will be the rdata type the SIG/RRSIG covers. The library treats the SIG and RRSIG types as if they were a family of types, e.g. RRSIG(A), RRSIG(NS), RRSIG(SOA). This makes RRSIGs much easier to work with than if RRSIGs covering different rdata types were aggregated into a single RRSIG rdataset. *create*, a ``bool``. If True, create the rdataset if it is not found. Returns a ``dns.rdataset.Rdataset`` or ``None``. """ try: rds = self.find_rdataset(rdclass, rdtype, covers, create) except KeyError: rds = None return rds def delete_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE): """Delete the rdataset matching the specified properties in the current node. If a matching rdataset does not exist, it is not an error. *rdclass*, an ``int``, the class of the rdataset. *rdtype*, an ``int``, the type of the rdataset. *covers*, an ``int``, the covered type. """ rds = self.get_rdataset(rdclass, rdtype, covers) if rds is not None: self.rdatasets.remove(rds) def replace_rdataset(self, replacement): """Replace an rdataset. It is not an error if there is no rdataset matching *replacement*. Ownership of the *replacement* object is transferred to the node; in other words, this method does not store a copy of *replacement* at the node, it stores *replacement* itself. *replacement*, a ``dns.rdataset.Rdataset``. Raises ``ValueError`` if *replacement* is not a ``dns.rdataset.Rdataset``. """ if not isinstance(replacement, dns.rdataset.Rdataset): raise ValueError('replacement is not an rdataset') self.delete_rdataset(replacement.rdclass, replacement.rdtype, replacement.covers) self.rdatasets.append(replacement)