1#!/usr/bin/env python 2""" 3This script using NSNetServiceBrowser to look for local HTTP servers. 4""" 5 6import objc 7from Foundation import * 8 9class PrintingResolverDelegate(NSObject): 10 def netServiceDidResolveAddress_(self, service): 11 addresses = service.addresses() 12 if len(addresses) == 0: 13 return 14 print "%s.%s" % (service.name(), service.domain()) 15 for address in service.addresses(): 16 print " %s"%(address,) 17 print "" 18 19 def netService_didNotResolve_(self, service, didNotResolve): 20 print "didNotResolve",didNotResolve 21 22class PrintingBrowserDelegate(NSObject): 23 def startLookup(self): 24 for aNetService in self.services: 25 prd = PrintingResolverDelegate.new() 26 aNetService.setDelegate_(prd) 27 aNetService.resolve() 28 29 def netServiceBrowserWillSearch_(self, browser): 30 print "Browsing for advertised services..." 31 self.services = [] 32 33 def netServiceBrowserDidStopSearch_(self, browser): 34 print "Browse complete" 35 self.startLookup() 36 37 def netServiceBrowser_didNotSearch_(self, browser, errorDict): 38 print "Could not search." 39 40 def netServiceBrowser_didFindService_moreComing_(self, browser, aNetService, moreComing): 41 print "Found a service: %s %s"%(aNetService.name(), aNetService.domain()) 42 self.services.append(aNetService) 43 if not moreComing: 44 browser.stop() 45 46 def netServiceBrowser_didRemoveService_moreComing_(self, browser, aNetService, moreComing): 47 print "Service removed: %s"%(aNetService.name(),) 48 if not moreComing: 49 browser.stop() 50 51def findDomains(serviceName, seconds=5.0): 52 runloop = NSRunLoop.currentRunLoop() 53 browser = NSNetServiceBrowser.new() 54 pbd = PrintingBrowserDelegate.new() 55 browser.setDelegate_(pbd) 56 browser.searchForServicesOfType_inDomain_(serviceName, "") 57 untilWhen = NSDate.dateWithTimeIntervalSinceNow_(seconds) 58 runloop.runUntilDate_(untilWhen) 59 60if __name__ == '__main__': 61 # Use '_afpovertcp' instead of '_http' to look for fileservers. 62 findDomains("_afpovertcp._tcp") 63