Skip to main content

A pure python implementation of multicast DNS service discovery

Project description

python-zeroconf

https://github.com/python-zeroconf/python-zeroconf/workflows/CI/badge.svg https://img.shields.io/pypi/v/zeroconf.svg https://codecov.io/gh/python-zeroconf/python-zeroconf/branch/master/graph/badge.svg Codspeed.io status for python-zeroconf Documentation Status

Documentation.

This is fork of pyzeroconf, Multicast DNS Service Discovery for Python, originally by Paul Scott-Murphy (https://github.com/paulsm/pyzeroconf), modified by William McBrine (https://github.com/wmcbrine/pyzeroconf).

The original William McBrine’s fork note:

This fork is used in all of my TiVo-related projects: HME for Python
(and therefore HME/VLC), Network Remote, Remote Proxy, and pyTivo.
Before this, I was tracking the changes for zeroconf.py in three
separate repos. I figured I should have an authoritative source.

Although I make changes based on my experience with TiVos, I expect that
they're generally applicable. This version also includes patches found
on the now-defunct (?) Launchpad repo of pyzeroconf, and elsewhere
around the net -- not always well-documented, sorry.

Compatible with:

  • Bonjour

  • Avahi

Compared to some other Zeroconf/Bonjour/Avahi Python packages, python-zeroconf:

  • isn’t tied to Bonjour or Avahi

  • doesn’t use D-Bus

  • doesn’t force you to use particular event loop or Twisted (asyncio is used under the hood but not required)

  • is pip-installable

  • has PyPI distribution

  • has an optional cython extension for performance (pure python is supported as well)

Python compatibility

  • CPython 3.10+

  • PyPy 3.10+

Versioning

This project uses semantic versioning.

Status

This project is actively maintained.

Traffic Reduction

Before version 0.32, most traffic reduction techniques described in https://datatracker.ietf.org/doc/html/rfc6762#section-7 where not implemented which could lead to excessive network traffic. It is highly recommended that version 0.32 or later is used if this is a concern.

IPv6 support

IPv6 support is relatively new and currently limited, specifically:

  • InterfaceChoice.All is an alias for InterfaceChoice.Default on non-POSIX systems.

  • Dual-stack IPv6 sockets are used, which may not be supported everywhere (some BSD variants do not have them).

  • Listening on localhost (::1) does not work. Help with understanding why is appreciated.

How to get python-zeroconf?

The easiest way to install python-zeroconf is using pip:

pip install zeroconf

How do I use it?

Here’s an example of browsing for a service:

from zeroconf import ServiceBrowser, ServiceListener, Zeroconf


class MyListener(ServiceListener):

    def update_service(self, zc: Zeroconf, type_: str, name: str) -> None:
        print(f"Service {name} updated")

    def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:
        print(f"Service {name} removed")

    def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:
        info = zc.get_service_info(type_, name)
        print(f"Service {name} added, service info: {info}")


zeroconf = Zeroconf()
listener = MyListener()
browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)
try:
    input("Press enter to exit...\n\n")
finally:
    zeroconf.close()

If you don’t know the name of the service you need to browse for, try:

from zeroconf import ZeroconfServiceTypes
print('\n'.join(ZeroconfServiceTypes.find()))

See examples directory for more.

Changelog

Changelog

License

LGPL, see COPYING file for details.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zeroconf-0.149.0.tar.gz (167.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zeroconf-0.149.0-cp314-cp314-manylinux_2_41_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.41+ x86-64

File details

Details for the file zeroconf-0.149.0.tar.gz.

File metadata

  • Download URL: zeroconf-0.149.0.tar.gz
  • Upload date:
  • Size: 167.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for zeroconf-0.149.0.tar.gz
Algorithm Hash digest
SHA256 47bf12976802a4b258b03569fc8c13ded9bb2b7a81d33ec8cd465e43e0fbde7d
MD5 af0c7ec9d32229d2cd4cf0c5c7c7c9e3
BLAKE2b-256 9ea5aeb4152ab82772bd11c7255ee91aa2dcc10cc07164e77a736939321a0138

See more details on using hashes here.

Provenance

The following attestation bundles were made for zeroconf-0.149.0.tar.gz:

Publisher: ci.yml on python-zeroconf/python-zeroconf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zeroconf-0.149.0-cp314-cp314-manylinux_2_41_x86_64.whl.

File metadata

File hashes

Hashes for zeroconf-0.149.0-cp314-cp314-manylinux_2_41_x86_64.whl
Algorithm Hash digest
SHA256 4036d9cb82018594f5eba08b8d27771d627b13ead0447d3a1205317dee0e5552
MD5 7334aaa232f536796294eb71d156d2a0
BLAKE2b-256 e8d7bd9fa1bd0e7b190a4c0afc8d4b51d87d3a5493b69bafedac07745d8f9cbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for zeroconf-0.149.0-cp314-cp314-manylinux_2_41_x86_64.whl:

Publisher: ci.yml on python-zeroconf/python-zeroconf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page