Respostas:
A dns-sd
ferramenta de linha de comando pode ser útil para isso, mas aprender a usá-la é um pouco complicado.
A execução dns-sd -B _services._dns-sd._udp
retornará uma lista de todos os tipos de serviço disponíveis que estão sendo anunciados no momento. (A lista é por interface, portanto haverá redundância.) Se isso for feito em um Mac sem conexão de rede ativa, é claro que a lista conterá apenas os serviços em execução nessa máquina.
Usando essa lista, você pode solicitar informações sobre os tipos de serviços individuais executando coisas como dns-sd -B _home-sharing._tcp
(que lista as instâncias do iTunes Home Sharing) e, em seguida, com o nome de uma instância, você pode executar dns-sd -L "Wes Campaigne’s Library" _home-sharing._tcp
as informações de pesquisa de uma instância específica.
Para ser honesto, porém, todo esse processo é bastante tedioso e é exatamente para isso que o Discovery (anteriormente Bonjour Browser) foi criado, então eu recomendo usá-lo. Seja como for, no entanto, nem sempre é claro qual o programa responsável por uma determinada entrada de serviço.
Você pode usar a estratégia dada na resposta do binarybob para tentar mapear entradas de serviço para processos em execução com base no número da porta, mas isso nem sempre funciona. Outra estratégia é executar algo como o dns-sd -B _home-sharing._tcp
que permanece aberto e relata quando as instâncias são adicionadas ou removidas e, uma a uma, sai de vários aplicativos e (assumindo que não é um serviço do sistema) ver qual deles sai acionando a mensagem de remoção.
Embora possa não satisfazer seus critérios exatos, o Navegador Bonjour da Tildesoft pode listar todos os serviços bonjour anunciados em sua rede local e os hosts que os anunciam.
Eu acho que, para serviços anunciados localmente, você pode fazer uma busca detalhada no navegador Bonjour para encontrar o número da porta na qual o serviço é anunciado e, em seguida, usar lsof
para determinar o aplicativo associado a ele, por exemplo:
lsof -i | grep 57857
dá
iTunes 36720 ... TCP *:57857 (LISTEN)
quando eu tiver o iTunes em execução.
Embora classificado como um artigo herdado, pode muito bem ser o que você está procurando: DNSServiceMetaQuery. Conforme descrito na documentação:
Este exemplo usa DNSServiceQueryRecord para enviar uma consulta DNS Multicast que retorna uma lista dos tipos de serviço Bonjour que estão sendo anunciados na rede local. As máquinas devem estar executando o mDNSResponder-58.6 (Mac OS X 10.3.4) ou posterior para responder a esta consulta.
Para executar o DNSServiceMetaQuery no Mountain Lion (a compilação incluída não funciona corretamente), acesse o link do código de exemplo e clique em Baixar Código de Amostra. Em seguida, instale o Xcode se você ainda não o fez. Crie um novo projeto no modelo do Mac OS X> Aplicativo> Command Line Tool .
Abra e copie todo o texto ~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.c
e cole-o no main.c
seu novo projeto da Command Line Tool (substituindo tudo o que havia no modelo). Em seguida, você precisará adicionar CoreFoundation.framework ao projeto clicando no nome do projeto na barra lateral> Construir fases e abrir a seta suspensa ao lado de Vincular binário com bibliotecas. Clique no +botão, procure CoreFoundation.framework e adicione-o. Em seguida, clique no botão Executar (se parece com um botão de reprodução) e aguarde uma imagem de Build Successful. Algo deve vir do botão da janela com um log; isso exibirá todos os seus serviços Bonjour. Verifique se Todas as saídas está marcada.
_daap
.