Posso elencare tutti i servizi abilitati per Bonjour in esecuzione?

21

Sarei interessato a sapere quali programmi pubblicizzano se stessi usando Bonjour sulla mia macchina. C'è un modo per farlo?

    
posta zneak 29.09.2012 - 05:47
fonte

3 risposte

35

Lo strumento da riga di comando dns-sd può essere utile per questo, ma imparare a usarlo è un po 'complicato.

L'esecuzione di dns-sd -B _services._dns-sd._udp restituirà un elenco di tutti i tipi di servizio disponibili attualmente pubblicizzati. (L'elenco è per interfaccia, quindi ci sarà una certa ridondanza.) Se questo viene fatto su un Mac senza connessione di rete attiva, l'elenco ovviamente conterrà solo servizi in esecuzione su quella macchina.

Utilizzando questo elenco, puoi richiedere informazioni sui singoli tipi di servizi eseguendo cose come dns-sd -B _home-sharing._tcp (che elenca le istanze di Condivisione in famiglia di iTunes), e quindi, dato un nome di istanza, puoi eseguire dns-sd -L "Wes Campaigne’s Library" _home-sharing._tcp per cercare informazioni per una particolare istanza.

Per essere onesti, tuttavia, l'intero processo è piuttosto noioso, ed è esattamente ciò che è stato creato per Bonjour Browser , quindi consiglio vivamente di usarlo (L'app potrebbe essere antica, ma funziona comunque.) Qualsiasi modo tu lo faccia, tuttavia, potrebbe non essere sempre chiaro quale programma è responsabile per una determinata voce di servizio.

Puoi utilizzare la strategia fornita nella risposta di binarybob per provare ad associare le voci dei servizi ai processi in esecuzione in base alla porta numero, ma questo potrebbe non funzionare sempre. Un'altra strategia consiste nell'eseguire qualcosa come dns-sd -B _home-sharing._tcp che rimane aperta e segnala quando le istanze vengono aggiunte o rimosse, quindi, una per una, esci da varie app e (supponendo che non sia un servizio di sistema) vedi quale smette di far scattare il messaggio di rimozione.

    
risposta data 03.01.2013 - 06:23
fonte
4

Anche se potrebbe non soddisfare i tuoi criteri esatti, il Bonjour Browser di Tildesoft può elencare tutti i servizi bonjour pubblicizzati sulla tua rete locale e i padroni di casa che li stanno pubblicizzando.

Suppongo che i servizi pubblicizzati localmente possano essere visualizzati in dettaglio in Bonjour Browser 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

iTunes    36720   ...     TCP *:57857 (LISTEN)

quando ho iTunes in esecuzione.

    
risposta data 29.09.2012 - 09:26
fonte
2

Sebbene sia classificato come un articolo precedente, questo potrebbe essere esattamente ciò che stai cercando: DNSServiceMetaQuery. Come delineato dalla documentazione:

This sample uses DNSServiceQueryRecord to send a Multicast DNS query that returns a list of Bonjour service types being advertised on the local network. Machines must be running mDNSResponder-58.6 (Mac OS X 10.3.4) or later in order to respond to this query.

Per eseguire DNSServiceMetaQuery su Mountain Lion (la build inclusa non funziona correttamente), vai a link codice di esempio e fai clic su Scarica codice di esempio. Quindi, installa Xcode se non lo hai già fatto. Crea un nuovo progetto sotto il modello di Mac OS X > Applicazione > Strumento da riga di comando .

Apri e copia tutto il testo in ~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.c e incollalo in main.c del tuo nuovo progetto dello Strumento 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 le librerie. Fai clic sul pulsante + , cerca CoreFoundation.framework e aggiungilo. Quindi fai clic sul pulsante Esegui (assomiglia ad un pulsante di riproduzione) e attendi un'immagine di Build Succeeded. Qualcosa dovrebbe venire dal pulsante della finestra con un log; questo mostrerà tutti i tuoi servizi Bonjour. Assicurati che All Output sia selezionato.

    
risposta data 29.09.2012 - 08:40
fonte

Leggi altre domande sui tag