problems with pyzeroconf and linux

S

Simo Hosio

Hi all,
I am trying to get pyzeroconf (http://sourceforge.net/projects/pyzeroconf)
running on my machine but having trouble... Running the Zeroconf.py file
seems to register the service, but is unable to find it.

(same situation than in
http://www.nabble.com/pyzeroconf-on-linux...-t481215.html, but differenet
cause, I'm sure..)

"""
Multicast DNS Service Discovery for Python, version 0.12
1. Testing registration of a service...
Registering service...
Registration done.
2. Testing query of service information...
Getting ZOE service: None
Query done.
3. Testing query of own service...
Getting self: None
Query done.
4. Testing unregister of service information...
Unregister done.
"""

Running ethereal reveals that there are no responses to the 2) and
3)...The queries are certainly there. I'm runnin this with Ubuntu Dapper in
a WLAN network. I am not too familiar with networking in Linux environment,
so if anyone has any help on how to get it running, I would appreciate. :)


Best Regards,
Simo Hosio
 
D

Damjan

I am trying to get pyzeroconf (http://sourceforge.net/projects/pyzeroconf)
running on my machine but having trouble... Running the Zeroconf.py file
seems to register the service, but is unable to find it.

You should be running avahi.. it also comes python support.

Here's an example that registers a CNAME that points to your hostname (that
avahi itself publishes)

#! /usr/bin/env python
import avahi, dbus
from encodings.idna import ToASCII

# Got these from /usr/include/avahi-common/defs.h
CLASS_IN = 0x01
TYPE_CNAME = 0x05

TTL = 60

def publish_cname(cname):
bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME,
avahi.DBUS_PATH_SERVER),
avahi.DBUS_INTERFACE_SERVER)
group = dbus.Interface(bus.get_object(avahi.DBUS_NAME,
server.EntryGroupNew()),
avahi.DBUS_INTERFACE_ENTRY_GROUP)

rdata = createRR(server.GetHostNameFqdn())
cname = encode_dns(cname)

group.AddRecord(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
cname, CLASS_IN, TYPE_CNAME, TTL, rdata)
group.Commit()


def encode_dns(name):
out = []
for part in name.split('.'):
if len(part) == 0: continue
out.append(ToASCII(part))
return '.'.join(out)

def createRR(name):
out = []
for part in name.split('.'):
if len(part) == 0: continue
out.append(chr(len(part)))
out.append(ToASCII(part))
out.append('\0')
return ''.join(out)

if __name__ == '__main__':
import time, sys, locale
for each in sys.argv[1:]:
name = unicode(each, locale.getpreferredencoding())
publish_cname(name)
try:
while 1: time.sleep(60)
except KeyboardInterrupt:
print "Exiting"
 
S

Simo Hosio

I am trying to get pyzeroconf (http://sourceforge.net/projects/pyzeroconf)
running on my machine but having trouble... Running the Zeroconf.py file
seems to register the service, but is unable to find it.

You should be running avahi.. it also comes python support.

Here's an example that registers a CNAME that points to your hostname (that
avahi itself publishes)

#! /usr/bin/env python
import avahi, dbus
from encodings.idna import ToASCII

# Got these from /usr/include/avahi-common/defs.h
CLASS_IN = 0x01
TYPE_CNAME = 0x05

TTL = 60

def publish_cname(cname):
bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME,
avahi.DBUS_PATH_SERVER),
avahi.DBUS_INTERFACE_SERVER)
group = dbus.Interface(bus.get_object(avahi.DBUS_NAME,
server.EntryGroupNew()),
avahi.DBUS_INTERFACE_ENTRY_GROUP)

rdata = createRR(server.GetHostNameFqdn())
cname = encode_dns(cname)

group.AddRecord(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
cname, CLASS_IN, TYPE_CNAME, TTL, rdata)
group.Commit()


def encode_dns(name):
out = []
for part in name.split('.'):
if len(part) == 0: continue
out.append(ToASCII(part))
return '.'.join(out)

def createRR(name):
out = []
for part in name.split('.'):
if len(part) == 0: continue
out.append(chr(len(part)))
out.append(ToASCII(part))
out.append('\0')
return ''.join(out)

if __name__ == '__main__':
import time, sys, locale
for each in sys.argv[1:]:
name = unicode(each, locale.getpreferredencoding())
publish_cname(name)
try:
while 1: time.sleep(60)
except KeyboardInterrupt:
print "Exiting"

Hi,
I actually tried Avahi also at first, but was having a lot of difficulties
setting it up to my actual target environment (Maemo platform, based on
Debian, and used on Nokia 770&N800 devices...).

Probably this is anyhow an issue of Debian network configuration, so maybe
I'll ask the lists there also.

I will later utilize Avahi, if possible, so thanks for the code snippet. :)
And if anyone knows what might be the propblem with Pyzeroconf and my dear
Ubuntu, please tell me.

Br,
Simo
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,222
Messages
2,571,138
Members
47,755
Latest member
Grazynkaa

Latest Threads

Top