Skip to content

A small async DNS client for MicroPython

License

Notifications You must be signed in to change notification settings

vshymanskyy/aiodns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aiodns

StandWithUkraine GitHub issues GitHub license Support vshymanskyy

A small async DNS client for MicroPython

  • Works on ESP32, ESP8266, Raspberry Pi Pico W, WM W600 and other boards
  • Versatile, runs multiple queries at a time using multiple DNS servers
  • Supports IPv4 and IPv6
  • Supports mDNS (Multicast DNS) name resolution
  • Works with WiFi, Ethernet, Cellular, and in multi-network scenarios
  • Caches up to 32 hostnames (configurable)
  • API-compatible with getaddrinfo

Install

Install using ViperIDE

Using CLI:

mpremote mip install github:vshymanskyy/aiodns

Using REPL (your board must be connected to the internet):

import mip
mip.install("github:vshymanskyy/aiodns")

Example

See usage examples

API

aiodns.servers = set(["8.8.8.8", "1.1.1.1"])
aiodns.servers.add("9.9.9.9")
aiodns.timeout_ms = 5000
aiodns.cache.clear()
aiodns.cache_size = 32
await aiodns.getaddrinfo(hostname, port, family=AF_INET, type=0, proto=0, flags=0)

Extra

Minify to ~2'800 bytes:

pip3 install -U python-minifier
pyminify aiodns.py -o aiodns_min.py --rename-globals --preserve-globals=getaddrinfo,servers,cache,cache_size,timeout_ms,AF_INET,AF_INET6,AF_UNSPEC,SOCK_DGRAM,SOCK_STREAM

Compile to MPY ~2'200 bytes:

mpy-cross aiodns.py -O3 -o aiodns.mpy

Run example using MicroPython Unix port:

export MICROPYPATH=".frozen:."
micropython examples/simple/main.py