client (version 1.0.0)
index
client.py

DNS async client.
 
Three levels:
  - send_udp_raw / send_tcp_raw : low-level forced transport
  - resolve()                    : RFC-compliant smart resolver
  - Helper functions             : resolve_a, resolve_aaaa, resolve_mx, etc.

 
Functions
       
build_query( name: str, qtype: int = <RecordType.A: 1>, qclass: int = <RecordClass.IN: 1>, transaction_id: Optional[int] = None, rd: int = 1 ) -> bytes
Build a standard DNS query packet (wire format).
async query( name: str, qtype: int = <RecordType.A: 1>, server: str = '8.8.8.8', port: int = 53, timeout: float = 5.0, qclass: int = <RecordClass.IN: 1> ) -> DNSMessage
RFC-compliant query:
  - Uses UDP first (<=512 bytes).
  - If TC (truncated) flag is set, retries over TCP.
  - Falls back to TCP if the query itself exceeds 512 bytes.
Returns the decoded DNSMessage.
async query_tcp( name: str, qtype: int = <RecordType.A: 1>, server: str = '8.8.8.8', port: int = 53, timeout: float = 5.0, transaction_id: Optional[int] = None ) -> DNSMessage
Force TCP regardless of packet size.
async query_udp( name: str, qtype: int = <RecordType.A: 1>, server: str = '8.8.8.8', port: int = 53, timeout: float = 3.0, transaction_id: Optional[int] = None ) -> DNSMessage
Force UDP regardless of packet size.
async resolve(name: str, server: str = '8.8.8.8', port: int = 53) -> List[str]
Smart resolve: tries A first, then AAAA.
Returns all IPs (v4 first, then v6).
async resolve_a(name: str, server: str = '8.8.8.8', port: int = 53) -> List[str]
Resolve A records -> list of IPv4 strings.
async resolve_aaaa(name: str, server: str = '8.8.8.8', port: int = 53) -> List[str]
Resolve AAAA records -> list of IPv6 strings.
async resolve_any(name: str, server: str = '8.8.8.8', port: int = 53) -> DNSMessage
Send ANY query and return the full DNSMessage.
async resolve_caa(name: str, server: str = '8.8.8.8', port: int = 53) -> List[CAARecord]
Resolve CAA records -> list of CAARecord objects.
async resolve_cname(name: str, server: str = '8.8.8.8', port: int = 53) -> List[str]
Resolve CNAME records -> list of canonical name strings.
async resolve_mx(name: str, server: str = '8.8.8.8', port: int = 53) -> List[Tuple[int, str]]
Resolve MX records -> list of (preference, exchange) tuples, sorted by preference.
async resolve_ns(name: str, server: str = '8.8.8.8', port: int = 53) -> List[str]
Resolve NS records -> list of nameserver strings.
async resolve_ptr(ip: str, server: str = '8.8.8.8', port: int = 53) -> List[str]
Reverse DNS lookup (PTR).
Automatically converts IPv4 (e.g. "8.8.8.8") to "8.8.8.8.in-addr.arpa".
async resolve_soa(name: str, server: str = '8.8.8.8', port: int = 53) -> Optional[SOARecord]
Resolve SOA record -> SOARecord or None.
async resolve_srv(name: str, server: str = '8.8.8.8', port: int = 53) -> List[SRVRecord]
Resolve SRV records -> list of SRVRecord objects.
async resolve_txt(name: str, server: str = '8.8.8.8', port: int = 53) -> List[str]
Resolve TXT records -> list of decoded text strings (segments joined).
async send_tcp_raw( packet: bytes, server: str = '8.8.8.8', port: int = 53, timeout: float = 5.0 ) -> bytes
Send raw DNS wire-format bytes over TCP (2-byte length prefix) and return
the raw response. Forces TCP regardless of message size.
async send_udp_raw( packet: bytes, server: str = '8.8.8.8', port: int = 53, timeout: float = 3.0 ) -> bytes
Send raw DNS wire-format bytes over UDP and return the raw response.
Forces UDP regardless of message size.

 
Data
        __all__ = ['send_udp_raw', 'send_tcp_raw', 'build_query', 'query', 'query_udp', 'query_tcp', 'resolve_a', 'resolve_aaaa', 'resolve_cname', 'resolve_mx', 'resolve_ns', 'resolve_txt', 'resolve_srv', 'resolve_ptr', 'resolve_soa', 'resolve_caa', 'resolve_any', 'resolve']
__author_email__ = 'mauricelambert434@gmail.com'
__copyright__ = '\nPyAsyncDNS Copyright (C) 2025, 2026 Maurice L...ome to redistribute it\nunder certain conditions.\n'
__description__ = '\nThis package implements a basic asynchronous DN...r\nwith a feature to exfiltrate data through DNS.\n'
__license__ = 'GPL-3.0 License'
__maintainer__ = 'Maurice Lambert'
__maintainer_email__ = 'mauricelambert434@gmail.com'
__url__ = 'https://github.com/mauricelambert/PyAsyncDNS'

 
Author
        Maurice Lambert