golden hour
/lib/python3.9/site-packages/dns
⬆️ Go Up
Upload
File/Folder
Size
Actions
__init__.py
1.62 KB
Del
OK
__pycache__
-
Del
OK
_asyncbackend.py
2.3 KB
Del
OK
_asyncio_backend.py
8.76 KB
Del
OK
_ddr.py
5.12 KB
Del
OK
_features.py
2.33 KB
Del
OK
_immutable_ctx.py
2.4 KB
Del
OK
asyncbackend.py
2.73 KB
Del
OK
asyncquery.py
26.22 KB
Del
OK
asyncresolver.py
17.43 KB
Del
OK
dnssec.py
39.74 KB
Del
OK
dnssecalgs
-
Del
OK
dnssectypes.py
1.76 KB
Del
OK
e164.py
3.88 KB
Del
OK
edns.py
14.91 KB
Del
OK
entropy.py
4.14 KB
Del
OK
enum.py
3.6 KB
Del
OK
exception.py
5.82 KB
Del
OK
flags.py
2.69 KB
Del
OK
grange.py
2.1 KB
Del
OK
immutable.py
1.97 KB
Del
OK
inet.py
5.64 KB
Del
OK
ipv4.py
2.49 KB
Del
OK
ipv6.py
6.45 KB
Del
OK
message.py
64.45 KB
Del
OK
name.py
41.67 KB
Del
OK
namedict.py
3.91 KB
Del
OK
nameserver.py
9.68 KB
Del
OK
node.py
12.37 KB
Del
OK
opcode.py
2.67 KB
Del
OK
query.py
53.55 KB
Del
OK
quic
-
Del
OK
rcode.py
4.06 KB
Del
OK
rdata.py
28.77 KB
Del
OK
rdataclass.py
2.91 KB
Del
OK
rdataset.py
16.36 KB
Del
OK
rdatatype.py
7.17 KB
Del
OK
rdtypes
-
Del
OK
renderer.py
10.99 KB
Del
OK
resolver.py
71.83 KB
Del
OK
reversename.py
3.74 KB
Del
OK
rrset.py
8.96 KB
Del
OK
serial.py
3.52 KB
Del
OK
set.py
8.88 KB
Del
OK
tokenizer.py
23.03 KB
Del
OK
transaction.py
22.11 KB
Del
OK
tsig.py
11.15 KB
Del
OK
tsigkeyring.py
2.57 KB
Del
OK
ttl.py
2.91 KB
Del
OK
update.py
11.96 KB
Del
OK
version.py
1.88 KB
Del
OK
versioned.py
11.49 KB
Del
OK
win32util.py
8.89 KB
Del
OK
wire.py
2.76 KB
Del
OK
xfr.py
12.96 KB
Del
OK
zone.py
50.87 KB
Del
OK
zonefile.py
27.27 KB
Del
OK
zonetypes.py
690 B
Del
OK
Edit: inet.py
# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license # Copyright (C) 2003-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. """Generic Internet address helper functions.""" import socket from typing import Any, Optional, Tuple import dns.ipv4 import dns.ipv6 # We assume that AF_INET and AF_INET6 are always defined. We keep # these here for the benefit of any old code (unlikely though that # is!). AF_INET = socket.AF_INET AF_INET6 = socket.AF_INET6 def inet_pton(family: int, text: str) -> bytes: """Convert the textual form of a network address into its binary form. *family* is an ``int``, the address family. *text* is a ``str``, the textual address. Raises ``NotImplementedError`` if the address family specified is not implemented. Returns a ``bytes``. """ if family == AF_INET: return dns.ipv4.inet_aton(text) elif family == AF_INET6: return dns.ipv6.inet_aton(text, True) else: raise NotImplementedError def inet_ntop(family: int, address: bytes) -> str: """Convert the binary form of a network address into its textual form. *family* is an ``int``, the address family. *address* is a ``bytes``, the network address in binary form. Raises ``NotImplementedError`` if the address family specified is not implemented. Returns a ``str``. """ if family == AF_INET: return dns.ipv4.inet_ntoa(address) elif family == AF_INET6: return dns.ipv6.inet_ntoa(address) else: raise NotImplementedError def af_for_address(text: str) -> int: """Determine the address family of a textual-form network address. *text*, a ``str``, the textual address. Raises ``ValueError`` if the address family cannot be determined from the input. Returns an ``int``. """ try: dns.ipv4.inet_aton(text) return AF_INET except Exception: try: dns.ipv6.inet_aton(text, True) return AF_INET6 except Exception: raise ValueError def is_multicast(text: str) -> bool: """Is the textual-form network address a multicast address? *text*, a ``str``, the textual address. Raises ``ValueError`` if the address family cannot be determined from the input. Returns a ``bool``. """ try: first = dns.ipv4.inet_aton(text)[0] return first >= 224 and first <= 239 except Exception: try: first = dns.ipv6.inet_aton(text, True)[0] return first == 255 except Exception: raise ValueError def is_address(text: str) -> bool: """Is the specified string an IPv4 or IPv6 address? *text*, a ``str``, the textual address. Returns a ``bool``. """ try: dns.ipv4.inet_aton(text) return True except Exception: try: dns.ipv6.inet_aton(text, True) return True except Exception: return False def low_level_address_tuple( high_tuple: Tuple[str, int], af: Optional[int] = None ) -> Any: """Given a "high-level" address tuple, i.e. an (address, port) return the appropriate "low-level" address tuple suitable for use in socket calls. If an *af* other than ``None`` is provided, it is assumed the address in the high-level tuple is valid and has that af. If af is ``None``, then af_for_address will be called. """ address, port = high_tuple if af is None: af = af_for_address(address) if af == AF_INET: return (address, port) elif af == AF_INET6: i = address.find("%") if i < 0: # no scope, shortcut! return (address, port, 0, 0) # try to avoid getaddrinfo() addrpart = address[:i] scope = address[i + 1 :] if scope.isdigit(): return (addrpart, port, 0, int(scope)) try: return (addrpart, port, 0, socket.if_nametoindex(scope)) except AttributeError: # pragma: no cover (we can't really test this) ai_flags = socket.AI_NUMERICHOST ((*_, tup), *_) = socket.getaddrinfo(address, port, flags=ai_flags) return tup else: raise NotImplementedError(f"unknown address family {af}") def any_for_af(af): """Return the 'any' address for the specified address family.""" if af == socket.AF_INET: return "0.0.0.0" elif af == socket.AF_INET6: return "::" raise NotImplementedError(f"unknown address family {af}") def canonicalize(text: str) -> str: """Verify that *address* is a valid text form IPv4 or IPv6 address and return its canonical text form. IPv6 addresses with scopes are rejected. *text*, a ``str``, the address in textual form. Raises ``ValueError`` if the text is not valid. """ try: return dns.ipv6.canonicalize(text) except Exception: try: return dns.ipv4.canonicalize(text) except Exception: raise ValueError
Save