Поиск и публикация сетевых служб, объявленных с помощью многоадресной рассылки DNS (Bonjour), с помощью Hammerspoon.
Этот модуль позволит вам обнаруживать службы, объявленные в вашей сети через многоадресную рассылку DNS, и публиковать службы, предлагаемые вашим компьютером.
Опрашивает хост о типах служб, которые он рекламирует через многоадресную рассылку DNS.
Параметры
target — строка, определяющая целевой хост для запроса типов рекламируемых служб
callback — функция обратного вызова, которая будет вызвана после завершения запроса типа службы. Функция обратного вызова должна ожидать один аргумент, который будет либо массивом строк, определяющих типы служб, которые рекламирует целевой хост, либо строкой, определяющей ошибку, которая произошла.
Возвращаемое значение
None
Примечания
эта функция может не работать для всех клиентов, использующих многоадресную рассылку DNS; она успешно протестирована на целевых машинах macOS и Linux, выполняющих службу Avahi Daemon, но обычно возвращала ошибку при использовании с минималистическими реализациями, встречающимися в распространенных устройствах IoT и встроенной электронике.
Возвращает список типов служб, рекламируемых в вашей локальной сети.
Параметры
callback — функция обратного вызова, которая будет вызвана по завершении запроса служб. Функция обратного вызова должна ожидать один аргумент: массив строк, определяющих типы служб, обнаруженные в локальной сети.
timeout — необязательное число, по умолчанию 5, определяющее максимальное количество секунд после последнего полученного типа службы, которое Hammerspoon должен ждать, пытаясь идентифицировать рекламируемые типы служб, прежде чем завершить свой запрос и вызвать функцию обратного вызова.
Возвращаемое значение
None
Примечания
Эта функция — удобная обертка над hs.bonjour:findServices, которая собирает результаты нескольких обратных вызовов, сделанных для findServices, и возвращает их все сразу функции обратного вызова, предоставленной в качестве аргумента этой функции.
Поскольку эта функция собирает результаты нескольких обратных вызовов перед вызовом собственного обратного вызова, значение timeout, указанное в параметре, определяет максимальное время ожидания в секундах после последнего значения, полученного findServices, до тех пор, пока macOS не укажет, что, по его мнению, больше типов служб идентифицировать не нужно.
Это предположение macOS, которое может не всегда быть точным, если ваша локальная сеть работает медленно, или если в вашей сети есть машины, которые медленно реагируют.
См. hs.bonjour:findServices для получения более подробной информации, если вам нужно создать собственный запрос, который может сохраняться в течение более длительных периодов времени или требует логики завершения, игнорирующей предположение macOS.
Возвращает список доменов zero-conf и bonjour, видимых компьютеру пользователя.
Параметры
callback — функция, которая будет вызвана по мере обнаружения видимых доменов. Функция должна принимать следующие параметры и возвращать ничего:
browserObject — объект userdata для объекта браузера, который инициировал поиск
type — строка, которая будет 'domain' или 'error' * если type == 'domain', остальные аргументы будут: * added — логическое значение, указывающее, представляет ли этот вызов обратного вызова недавно обнаруженный или добавленный домен (true) или что домен удален из сети (false) * domain — строка, определяющая имя обнаруженного или удаленного домена * moreExpected — логическое значение, указывающее, ожидает ли браузер обнаружения дополнительных доменов или нет. * если type == 'error', остальные аргументы будут: * errorString — строка, определяющая ошибку, которая произошла
Возвращаемое значение
объект браузера
Примечания
Этот метод возвращает домены, видимые вашей машине; однако, ваша машина может или не может получить доступ к записям или опубликовать их внутри возвращенных доменов. См. hs.bonjour:findRegistrationDomains
Для большинства пользователей некорпоративных сетей, вероятно, вызов обратного вызова будет выполнен только один раз для домена local. Это нормально. Корпоративные сети или сети, включающие машины Linux, использующие дополнительные домены, определенные с помощью Avahi, могут показывать дополнительные домены, хотя большинство установок Avahi теперь по умолчанию используют только 'local', если не настроено иначе.
Когда moreExpected становится false, это предположение macOS о том, есть ли доступные дополнительные записи.
В целом macOS довольно точно в этом отношении при поиске доменов, поэтому, чтобы уменьшить нагрузку на системные ресурсы, рекомендуется использовать hs.bonjour:stop, когда этот параметр равен false
Возвращает список доменов zero-conf и bonjour, в которых этот компьютер может регистрировать службы.
Параметры
callback — функция, которая будет вызвана по мере обнаружения доменов. Функция должна принимать следующие параметры и возвращать ничего:
browserObject — объект userdata для объекта браузера, который инициировал поиск
type — строка, которая будет 'domain' или 'error' * если type == 'domain', остальные аргументы будут: * added — логическое значение, указывающее, представляет ли этот вызов обратного вызова недавно обнаруженный или добавленный домен (true) или что домен удален из сети (false) * domain — строка, определяющая имя обнаруженного или удаленного домена * moreExpected — логическое значение, указывающее, ожидает ли браузер обнаружения дополнительных доменов или нет. * если type == 'error', остальные аргументы будут: * errorString — строка, определяющая ошибку, которая произошла
Возвращаемое значение
объект браузера
Примечания
Этот метод является предпочтительным для доступа к доменам, так как гарантирует, что хост-машина может подключиться к службам в возвращенных доменах. Доступ к доменам за пределами этого списка может быть ограничен. См. также hs.bonjour:findBrowsableDomains
Для большинства пользователей некорпоративных сетей, вероятно, вызов обратного вызова будет выполнен только один раз для домена local. Это нормально. Корпоративные сети или сети, включающие машины Linux, использующие дополнительные домены, определенные с помощью Avahi, могут показывать дополнительные домены, хотя большинство установок Avahi теперь по умолчанию используют только 'local', если не настроено иначе.
Когда moreExpected становится false, это предположение macOS о том, есть ли доступные дополнительные записи.
В целом macOS довольно точно в этом отношении при поиске доменов, поэтому, чтобы уменьшить нагрузку на системные ресурсы, рекомендуется использовать hs.bonjour:stop, когда этот параметр равен false
type - строка, определяющая тип службы для поиска в вашей сети. Эта строка должна быть указана в формате '_service._protocol.', где _protocol — это '_tcp' или '_udp'. Примеры распространённых типов служб можно найти в hs.bonjour.serviceTypes.
domain - необязательная строка, определяющая домен, в котором следует искать объявленные службы. Домен должен заканчиваться точкой. Если вы опустите этот параметр, будет использован стандартный регистрируемый домен, обычно "local".
callback - функция обратного вызова, которая будет вызвана при обнаружении объявлений служб, соответствующих указанным критериям. Функция обратного вызова должна ожидать от 2 до 5 аргументов следующим образом:
Если служба обнаружена или объявление о службе прекращено, аргументы будут: * объект браузера * строка "domain" * логическое значение, указывающее, рекламируется ли служба (true) или должна быть удалена, поскольку объявления о службе прекращены (false) * объект serviceObject для конкретного объявления (см. hs.bonjour.service) * логическое значение, указывающее, ожидаются ли дополнительные объявления (true) или macOS считает, что больше объявлений не будет обнаружено (false).
Если произошла ошибка, аргументы обратного вызова будут: * объект браузера * строка "error" * строка, описывающая конкретную ошибку, которая произошла
Returns
объект браузера
Notes
macOS укажет, когда, по его мнению, больше нет объявлений указанного типа, заданного в type, в domain, установив последнее аргумент вашей функции обратного вызова в false. Это приблизительная оценка и может быть неточной, если ваша сеть медленная или некоторые серверы в вашей сети реагируют с задержкой.
Кроме того, если вы оставляете браузер работающим, вы получите будущие обновления, когда службы будут удалены из-за завершения работы сервера или добавлены из-за запуска новых серверов.
Однако работающий браузер потребляет некоторые системные ресурсы, поэтому вам необходимо определить, является ли это проблемой для вашей конкретной задачи. Чтобы завершить работу браузера, когда вы получили всю необходимую информацию, вы можете использовать метод hs.bonjour:stop.
Специальный тип "_services._dns-sd._udp." можно использовать для поиска типов служб, рекламируемых в вашей сети. Объекты hs.bonjour.service , возвращаемые функции обратного вызова, фактически не могут быть разрешены, но вы можете использовать метод hs.bonjour.service:name для создания списка служб, которые в настоящее время присутствуют и рекламируются.
Этот специальный тип используется сокращенной функцией hs.bonjour.networkServices для этой конкретной цели.
Специальный домен "dns-sd.org." можно указать, чтобы найти службы, рекламируемые через широкомасштабное обнаружение служб, как описано в http://www.dns-sd.org. Это позволяет обнаружить ограниченное число глобально доступных сайтов в интернете, особенно при использовании типа службы _http._tcp..
Теоретически, с дополнительным программным обеспечением вы можете опубликовать службы на своём компьютере для обнаружения служб в масштабе всей сети, используя этот домен с hs.bonjour.service.new, но требования к локальному серверу DNS и последствия безопасности при этом выходят за рамки данного документа. Для получения дополнительной информации обратитесь к http://www.dns-sd.org и к администратору или провайдеру вашего локального сервера DNS.
hs.bonjour:includesPeerToPeer([value]) -> current value | browserObject
Type
Method
Description
Получить или установить, следует ли также просматривать по принципу "равноправный с равным" по Bluetooth и Wi-Fi, если они доступны.
Parameters
value - необязательное логическое значение, по умолчанию false, определяющее, следует ли также просматривать по принципу "равноправный с равным" по Bluetooth и Wi-Fi, если они доступны.
Returns
Если value предоставлен, возвращается объект браузера; в противном случае возвращается текущее значение для этого свойства
Notes
Это свойство должно быть установлено перед запуском поиска, чтобы оно имело эффект.
Останавливает текущий запрос или разрешение для объекта браузера
Parameters
Нет
Returns
объект браузера
Notes
Этот метод следует вызывать, когда вы определили необходимые службы или узлы, чтобы уменьшить потребление системных ресурсов.
Вызов этого метода для уже неактивного браузера ничего не сделает
В общем случае, когда ваша функция обратного вызова для hs.bonjour:findBrowsableDomains, hs.bonjour:findRegistrationDomains или hs.bonjour:findServices получает false для параметра moreExpected, вы должны вызвать этот метод для объекта браузера, если нет особых причин этого не делать. Возможные причины, по которым вы хотите продлить срок действия объекта браузера, документированы в каждом методе.