pybonjour 1.1.1

pybonjour provides a pure Python interface (via ctypes) to Apple Bonjour and compatible DNS-SD libraries (such as Avahi).
pybonjour provides a pure Python interface (via ctypes) to Apple Bonjour and compatible DNS-SD libraries (such as Avahi).

The application allows Python scripts to take advantage of Zero Configuration Networking (Zeroconf) to register, discover, and resolve services on both local and wide-area networks.

Since pybonjour is implemented in pure Python, scripts that use it can easily be ported to Mac OS X, Windows, Linux, and other systems that run Bonjour.

Examples

The following scripts are included in the examples directory of the pybonjour source distribution.

Registering a Service

register.py Script
import select
import sys
import pybonjour


name = sys.argv[1]
regtype = sys.argv[2]
port = int(sys.argv[3])


def register_callback(sdRef, flags, errorCode, name, regtype, domain):

if errorCode == pybonjour.kDNSServiceErr_NoError:
print 'Registered service:'
print ' name =', name
print ' regtype =', regtype
print ' domain =', domain


sdRef = pybonjour.DNSServiceRegister(name = name,
regtype = regtype,
port = port,
callBack = register_callback)

try:
try:
while True:
ready = select.select([sdRef], [], [])
if sdRef in ready[0]:
pybonjour.DNSServiceProcessResult(sdRef)
except KeyboardInterrupt:
pass
finally:
sdRef.close()

Example Output

$ python register.py TestService _test._tcp 1234

Registered service:

name = TestService
regtype = _test._tcp.
domain = local.

Browsing for and Resolving Services

browse_and_resolve.py Script
import select
import sys
import pybonjour

regtype = sys.argv[1]
timeout = 5
resolved = []

def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname,
hosttarget, port, txtRecord):
if errorCode == pybonjour.kDNSServiceErr_NoError:
print 'Resolved service:'
print ' fullname =', fullname
print ' hosttarget =', hosttarget
print ' port =', port
resolved.append(True)

def browse_callback(sdRef, flags, interfaceIndex, errorCode, serviceName,
regtype, replyDomain):
if errorCode != pybonjour.kDNSServiceErr_NoError:
return

if not (flags & pybonjour.kDNSServiceFlagsAdd):
print 'Service removed'
return

print 'Service added; resolving'

resolve_sdRef = pybonjour.DNSServiceResolve(0,
interfaceIndex,
serviceName,
regtype,
replyDomain,
resolve_callback)

try:
while not resolved:
ready = select.select([resolve_sdRef], [], [], timeout)
if resolve_sdRef not in ready[0]:
print 'Resolve timed out'
break
pybonjour.DNSServiceProcessResult(resolve_sdRef)
else:
resolved.pop()
finally:
resolve_sdRef.close()


browse_sdRef = pybonjour.DNSServiceBrowse(regtype = regtype,
callBack = browse_callback)

try:
try:
while True:
ready = select.select([browse_sdRef], [], [])
if browse_sdRef in ready[0]:
pybonjour.DNSServiceProcessResult(browse_sdRef)
except KeyboardInterrupt:
pass
finally:
browse_sdRef.close()

Example Output

$ python browse_and_resolve.py _test._tcp
Service added; resolving
Resolved service:
fullname = TestService._test._tcp.local.
hosttarget = bumble.local.
port = 1234
...

last updated on:
July 15th, 2008, 9:28 GMT
price:
FREE!
developed by:
Chris Stawarz
homepage:
o2s.csail.mit.edu
license type:
MIT/X Consortium License 
category:
ROOT \ System \ Networking

FREE!

In a hurry? Add it to your Download Basket!

user rating 6

2.7/5
 

0/5

Add your review!

SUBMIT