Risposte:
Lo dns-sd
strumento da riga di comando può essere utile per questo, ma imparare a usarlo è un po 'complicato.
In esecuzione dns-sd -B _services._dns-sd._udp
restituirà un elenco di tutti i tipi di servizi disponibili che sono attualmente pubblicizzati. (L'elenco è per interfaccia, quindi ci sarà un po 'di ridondanza.) Se questo viene fatto su un Mac senza connessione di rete attiva, l'elenco conterrà ovviamente solo i servizi in esecuzione su quella macchina.
Utilizzando tale elenco, è possibile richiedere informazioni sui singoli tipi di servizi eseguendo cose come dns-sd -B _home-sharing._tcp
(che elenca le istanze di iTunes Home Sharing), quindi, dato un nome di istanza, è possibile eseguire dns-sd -L "Wes Campaigne’s Library" _home-sharing._tcp
per cercare informazioni per una particolare istanza.
Ad essere onesti, tuttavia, l'intero processo è piuttosto noioso, ed è esattamente ciò che Discovery (precedentemente Bonjour Browser) è stato creato per fare, quindi consiglio vivamente di usarlo. In qualunque modo lo faccia, tuttavia, potrebbe non essere sempre chiaro quale programma sia responsabile di un determinato servizio.
È possibile utilizzare la strategia indicata nella risposta di binarybob per provare a mappare le voci del servizio ai processi in esecuzione in base al numero di porta, ma ciò potrebbe non funzionare sempre. Un'altra strategia è quella di eseguire qualcosa di similedns-sd -B _home-sharing._tcp
che rimane aperto e segnala quando vengono aggiunte o rimosse le istanze, quindi, una alla volta, esce da varie app e (supponendo che non sia un servizio di sistema) vedere chi si chiude attiva il messaggio di rimozione.
Anche se potrebbe non soddisfare i tuoi criteri esatti, il browser Bonjour di Tildesoft può elencare tutti i servizi bonjour pubblicizzati sulla tua rete locale e gli host che li pubblicizzano.
Immagino che per i servizi pubblicizzati localmente potresti approfondire nel browser Bonjour per trovare il numero di porta su cui è pubblicizzato il servizio, quindi utilizzare lsof
per determinare l'applicazione ad esso associata, ad esempio:
lsof -i | grep 57857
dà
iTunes 36720 ... TCP *:57857 (LISTEN)
quando ho iTunes in esecuzione.
Sebbene classificato come un articolo legacy, questo potrebbe benissimo essere quello che stai cercando: DNSServiceMetaQuery. Come indicato dalla documentazione:
In questo esempio viene utilizzato DNSServiceQueryRecord per inviare una query DNS multicast che restituisce un elenco di tipi di servizio Bonjour pubblicizzati sulla rete locale. Le macchine devono eseguire mDNSResponder-58.6 (Mac OS X 10.3.4) o versioni successive per rispondere a questa query.
Per eseguire DNSServiceMetaQuery su Mountain Lion (la build inclusa non funziona correttamente), vai al link del codice di esempio e fai clic su Scarica codice di esempio. Quindi, installa Xcode se non l'hai già fatto. Crea un nuovo progetto con il modello di Mac OS X> Applicazione> Strumento da riga di comando .
Apri e copia tutto il testo ~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.c
e incollalo nel main.c
nuovo progetto dello strumento da riga di comando (sostituendo tutto ciò che era presente nel modello). Successivamente, dovrai aggiungere CoreFoundation.framework al progetto facendo clic sul nome del progetto nella barra laterale> Crea fasi e apri la freccia a discesa accanto a Collega binario con librerie. Fai clic sul +pulsante, cerca CoreFoundation.framework e aggiungilo. Quindi fai clic sul pulsante Esegui (assomiglia a un pulsante di riproduzione) e attendi che l'immagine sia riuscita. Qualcosa dovrebbe provenire dal pulsante della finestra con un registro; questo mostrerà tutti i tuoi servizi Bonjour. Assicurarsi che sia selezionato Tutti gli output.
_daap
però.