Spec-Zone.ru › Hammerspoon

hs.network.ping.echoRequest

Предоставляет низкоуровневый доступ к инфраструктуре ICMP Echo Request, используемой модулем hs.network.ping. В общем случае, вам не нужно использовать этот модуль напрямую, если у вас нет специфических требований, которые не удовлетворяются модулем hs.network.ping и методами объекта hs.network.ping.

Этот модуль сильно основан на примере проекта Apple's SimplePing, который можно найти по адресу https://developer.apple.com/library/content/samplecode/SimplePing/Introduction/Intro.html.

Когда в качестве аргумента функции обратного вызова указана таблица ICMP, возвращаемая таблица Lua будет содержать следующие пары ключ-значение:

  • checksum - контрольная сумма пакета ICMP, используемая для обеспечения целостности данных.
  • code - код управляющего сообщения ICMP. Это всегда должно быть 0, если обратный вызов не получил сообщение "receivedUnexpectedPacket".
  • identifier - идентификатор пакета ICMP. Он должен соответствовать результатам hs.network.ping.echoRequest:identifier, если обратный вызов не получил сообщение "receivedUnexpectedPacket".
  • payload - строка, содержащая полезную нагрузку ICMP для этого пакета. По умолчанию полезная нагрузка построена так, чтобы пакет ICMP был ровно 64 байта, что соответствует соглашению для ICMP Echo Request.
  • sequenceNumber - порядковый номер пакета ICMP.
  • type - тип управляющего сообщения ICMP. Если обратный вызов не получил сообщение "receivedUnexpectedPacket", это будет 0 (ICMPv4) или 129 (ICMPv6) для полученных пакетов и 8 (ICMPv4) или 128 (ICMPv6) для отправленных пакетов.
  • _raw - строка, содержащая пакет ICMP в виде сырых данных.

В случаях, когда обратный вызов получает сообщение "receivedUnexpectedPacket", потому что пакет поврежден или усечен, эта таблица может содержать только поле _raw.

Обзор API

  • Конструкторы - вызовы API, возвращающие объект, обычно предлагающий методы API
    • echoRequest
  • Методы - вызовы API, которые могут быть выполнены только над объектом, возвращенным конструктором
    • acceptAddressFamily
    • hostAddress
    • hostAddressFamily
    • hostName
    • identifier
    • isRunning
    • nextSequenceNumber
    • seeAllUnexpectedPackets
    • sendPayload
    • setCallback
    • start
    • stop

Документация API

Конструкторы

echoRequest
Подпись hs.network.ping.echoRequest.echoRequest(server) -> echoRequestObject
Тип Конструктор
Описание

Создает новый объект ICMP Echo Request для указанного сервера.

Параметры
  • server - строка, содержащая имя хоста или IP-адрес сервера для связи. Поддерживаются адреса как IPv4, так и IPv6.
Возвращает
  • объект echoRequest
Примечания
  • Этот конструктор возвращает объект более низкого уровня, чем конструктор hs.network.ping.ping, и использовать его сложнее. Рекомендуется использовать этот конструктор только если hs.network.ping.ping не удовлетворяет вашим потребностям.

  • Для удобства вы можете вызвать этот конструктор как hs.network.ping.echoRequest(server)

Источник extensions/network/ping/libnetwork_ping.m строка 229

Методы

acceptAddressFamily
Подпись hs.network.ping.echoRequest:acceptAddressFamily([family]) -> echoRequestObject | current value
Тип Метод
Описание

Получение или установка семейства адресов, с которым должен взаимодействовать echoRequestObject.

Параметры
  • family - необязательная строка, по умолчанию "any", которая указывает семейство адресов, используемое этим объектом. Допустимые значения: "any", "IPv4" и "IPv6".
Возвращает
  • если аргумент предоставлен, возвращает echoRequestObject, в противном случае возвращает текущее значение.
Примечания
  • Установка этого значения на "IPv6" или "IPv4" приведет к тому, что echoRequestObject попытается разрешить имя сервера в IPv6-адрес или IPv4-адрес и взаимодействовать через ICMPv6 или ICMP(v4), когда вызывается метод hs.network.ping.echoRequest:start. Если сервер не может быть разрешен до адреса в указанном семействе, произойдет обратный вызов с сообщением "didFail".

  • Если это значение установлено на "any", то первый обнаруженный адрес для имени сервера определит, используется ли ICMPv6 или ICMP(v4), основываясь на семействе адреса.

  • Установка значения с помощью этого метода не окажет немедленного эффекта на echoRequestObject, который уже был запущен с помощью hs.network.ping.echoRequest:start. Для того, чтобы изменения вступили в силу, необходимо остановить, а затем перезапустить объект.

Источник extensions/network/ping/libnetwork_ping.m строка 384
hostAddress
Подпись hs.network.ping.echoRequest:hostAddress() -> string | false | nil
Тип Метод
Описание

Возвращает строковое представление IP-адреса сервера или логическое значение, если разрешение адреса еще не завершено.

Параметры
  • Нет
Возвращает
  • Если объект был запущен и разрешение адреса завершено, возвращается строковое представление IP-адреса сервера.
  • Если объект был запущен, но разрешение еще не завершено, возвращается логическое значение false.
  • Если объект не был запущен, возвращается nil.
Источник extensions/network/ping/libnetwork_ping.m строка 495
hostAddressFamily
Подпись hs.network.ping.echoRequest:hostAddressFamily() -> string
Тип Метод
Описание

Возвращает семейство адресов хоста, текущее используемое этим echoRequestObject.

Параметры
  • Нет
Возвращает
  • строка, указывающая семейство IP-адресов, текущее используемое этим echoRequestObject. Она будет иметь одно из следующих значений:
    • "IPv4" - указывает, что отправляются и принимаются пакеты ICMP(v4).
    • "IPv6" - указывает, что отправляются и принимаются пакеты ICMPv6.
    • "unresolved" - указывает, что echoRequestObject не был запущен или разрешение адреса все еще происходит.
Источник extensions/network/ping/libnetwork_ping.m строка 560
hostName
Подпись hs.network.ping.echoRequest:hostName() -> string
Тип Метод
Описание

Возвращает имя целевого хоста, предоставленное конструктору echoRequestObject.

Параметры
  • Нет
Возвращает
  • строка, содержащая имя хоста, как указано при создании объекта.
Источник extensions/network/ping/libnetwork_ping.m строка 325
identifier
Подпись hs.network.ping.echoRequest:identifier() -> integer
Тип Метод
Описание

Возвращает номер идентификатора для echoRequestObject.

Параметры
  • Нет
Возвращает
  • целое число, определяющее идентификатор, который встраивается в ICMP-пакеты, отправляемые этим объектом.
Примечания
  • ICMP Echo Reply, содержащие этот идентификатор, будут генерировать сообщение "receivedPacket" для объекта обратного вызова, в то время как ответы, содержащие другой идентификатор, будут генерировать сообщение "receivedUnexpectedPacket".
Источник extensions/network/ping/libnetwork_ping.m строка 342
isRunning
Подпись hs.network.ping.echoRequest:isRunning() -> boolean
Тип Метод
Описание

Возвращает логическое значение, указывающее, прослушивает ли этот echoRequestObject в настоящее время ICMP Echo Reply.

Параметры
  • Нет
Возвращает
  • true, если объект в настоящее время прослушивает ICMP Echo Reply, или false, если нет.
Источник extensions/network/ping/libnetwork_ping.m строка 476
nextSequenceNumber
Signature hs.network.ping.echoRequest:nextSequenceNumber() -> integer
Type Method
Description

Номер последовательности, который будет использован для следующего ICMP-пакета, отправленного этим объектом.

Parameters
  • None
Returns
  • целое число, определяющее номер последовательности, который будет вставлен в следующий ICMP-запрос, отправленный этим объектом, при вызове метода hs.network.ping.echoRequest:sendPayload.
Notes
  • ICMP-ответы эха, ожидаемые этим объектом, должны всегда быть меньше этого числа, с оговоркой, что это число является 16-битным целым числом, которое обнуляется после отправки пакета с номером последовательности 65535.
  • Из-за этого эффекта обнуления модуль будет генерировать сообщение "receivedPacket" в обработчик объекта всякий раз, когда полученный пакет имеет номер последовательности, который находится в последних 120 отправленных номерах последовательности, и сообщение "receivedUnexpectedPacket" в противном случае.
    • Согласно комментариям в файле SimplePing.m Apple: Почему 120? Ну, если мы отправляем один пинг в секунду, 120 — это 2 минуты, что является стандартным значением «максимального времени, которое может потребоваться пакету для перемещения по Интернету».
Source extensions/network/ping/libnetwork_ping.m строка 362
seeAllUnexpectedPackets
Signature hs.network.ping.echoRequest:seeAllUnexpectedPackets([state]) -> boolean | echoRequestObject
Type Method
Description

Получить или установить, следует ли обработчику получать все неожиданные пакеты или только те, которые содержат наш идентификатор.

Parameters
  • state - необязательный булевый параметр, по умолчанию false, определяющий, следует ли обрабатывать все неожиданные пакеты или только те, которые содержат наш идентификатор, для генерации сообщения обратного вызова "receivedUnexpectedPacket".
Returns
  • если аргумент предоставлен, возвращает echoRequestObject; в противном случае возвращает текущее значение
Notes
  • Природа приема ICMP-пакетов такова, что все слушатели получают все ICMP-пакеты, даже те, которые принадлежат другому процессу или echoRequestObject.
    • По умолчанию действительный пакет (т. е. с корректной контрольной суммой), не содержащий нашего идентификатора, игнорируется, так как он не предназначался нашему приемнику. Только поврежденные или пакеты с нашим идентификатором, но в остальном неожиданные, будут генерировать сообщение обратного вызова "receivedUnexpectedPacket".
    • Этот метод необязательно позволяет echoRequestObject получать все входящие пакеты, даже те, которые ожидаются другим процессом или echoRequestObject.
  • Если вы хотите проверить пакеты ICMPv6 маршрутизатора и обнаружения соседей, вы должны установить это свойство в значение true. Обратите внимание, что в этом модуле на данный момент нет необходимых инструментов для декодирования этих пакетов, поэтому вам придется декодировать их самостоятельно, если вы хотите проверить их содержимое.
Source extensions/network/ping/libnetwork_ping.m строка 595
sendPayload
Signature hs.network.ping.echoRequest:sendPayload([payload]) -> echoRequestObject | false | nil
Type Method
Description

Отправка одного ICMP-пакета запроса эха.

Parameters
  • payload - необязательная строка, содержащая данные для включения в ICMP-запрос эха в качестве полезной нагрузки пакета.
Returns
  • Если объект был запущен и разрешение адреса завершено, ICMP-пакет эха отправляется, и этот метод возвращает echoRequestObject
  • Если объект был запущен, но разрешение еще не завершено, пакет не отправляется, и этот метод возвращает логическое значение false.
  • Если объект не был запущен, пакет не отправляется, и этот метод возвращает nil.
Notes
  • По соглашению, если вы не пытаетесь проверить конкретные проблемы фрагментации или перегрузки сети, ICMP-запросы эха обычно имеют длину 64 байта (это включает заголовок размером 8 байт, что дает 56 байт полезной нагрузки). Если вы не указываете полезную нагрузку, создается значение по умолчанию, которое приведет к размеру пакета в 64 байта.
Source extensions/network/ping/libnetwork_ping.m строка 522
setCallback
Signature hs.network.ping.echoRequest:setCallback(fn) -> echoRequestObject
Type Method
Description

Установить или удалить функцию обратного вызова объекта

Parameters
  • fn - функция, которая будет установлена в качестве функции обратного вызова для этого объекта, или nil, если вы хотите удалить любую существующую функцию обратного вызова.
Returns
  • echoRequestObject
Notes
  • Функция обратного вызова должна принимать от 3 до 5 аргументов и не возвращать ничего. Возможные аргументы, которые будут отправлены, будут одним из следующих:

    • "didStart" — указывает, что объект разрешил адрес сервера и готов начать отправку и прием ICMP-пакетов запроса эха.

      • object — сам echoRequestObject
      • message — сообщение в обработчик обратного вызова, в данном случае "didStart"
      • address — строковое представление IPv4 или IPv6-адреса сервера, указанного в конструкторе.
    • "didFail" — указывает, что объект завершил работу, либо потому, что адрес не удалось разрешить, либо произошла сетевая ошибка.

      • object — сам echoRequestObject
      • message — сообщение в обработчик обратного вызова, в данном случае "didFail"
      • error — строка, описывающая произошедшую ошибку.
    • Примечания:

      • При получении этого сообщения вам не нужно вызывать hs.network.ping.echoRequest:stop — объект уже будет остановлен.
    • "sendPacket" — указывает, что объект отправил ICMP-пакет запроса эха.

      • object — сам echoRequestObject
      • message — сообщение в обработчик обратного вызова, в данном случае "sendPacket"
      • icmp — таблица ICMP-пакетов, представляющая отправленный пакет, как описано в заголовке документации этого модуля.
      • seq — номер последовательности для этого пакета. Номера последовательности всегда начинаются с 0 и увеличиваются на 1 каждый раз при вызове метода hs.network.ping.echoRequest:sendPayload.
    • "sendPacketFailed" — указывает, что объекту не удалось отправить ICMP-пакет запроса эха.

      • object — сам echoRequestObject
      • message — сообщение в обработчик обратного вызова, в данном случае "sendPacketFailed"
      • icmp — таблица ICMP-пакетов, представляющая пакет, который должен был быть отправлен.
      • seq — номер последовательности для этого пакета.
      • error — строка, описывающая произошедшую ошибку.
    • Примечания:

      • В отличие от "didFail", echoRequestObject не останавливается при возникновении этого сообщения; вы можете попробовать отправить еще один пакет, если хотите, без перезапуска объекта.
    • "receivedPacket" — указывает, что ожидаемый ICMP-пакет ответа эха был получен объектом.

      • object — сам echoRequestObject
      • message — сообщение в обработчик обратного вызова, в данном случае "receivedPacket"
      • icmp — таблица ICMP-пакетов, представляющая полученный пакет.
      • seq — номер последовательности для этого пакета.
    • "receivedUnexpectedPacket" — указывает, что был получен неожиданный ICMP-пакет.

      • object — сам echoRequestObject
      • message — сообщение в обработчик обратного вызова, в данном случае "receivedUnexpectedPacket"
      • icmp — таблица ICMP-пакетов, представляющая полученный пакет.
    • Примечания:

      • Это сообщение может возникать по различным причинам, наиболее распространенными из которых являются:
        • ICMP-пакет поврежден или усечен и не может быть проанализирован
        • Идентификатор ICMP не соответствует нашему, а номер последовательности не отправлялся нами
        • Тип ICMP не соответствует ICMP-ответу эха
        • При использовании IPv6 это особенно распространено, поскольку IPv6 использует ICMP для сетевых управляющих функций, таких как объявление маршрутизатора и обнаружение соседей.
      • В целом, эти сообщения можно достаточно безопасно игнорировать, если у вас не возникают проблемы с получением других сообщений, в этом случае это может указывать на проблемы в вашей сети, которые необходимо устранить.
Source extensions/network/ping/libnetwork_ping.m строка 253
start
Signature hs.network.ping.echoRequest:start() -> echoRequestObject
Type Method
Description

Запустить echoRequestObject, разрешив адрес сервера и начать прослушивание ICMP-пакетов ответа эха.

Parameters
  • None
Returns
  • echoRequestObject
Source extensions/network/ping/libnetwork_ping.m строка 427
stop
Signature hs.network.ping.echoRequest:stop() -> echoRequestObject
Type Method
Description

Остановить прослушивание ICMP-пакетов ответа эха с помощью этого объекта.

Parameters
  • None
Returns
  • echoRequestObject
Source extensions/network/ping/libnetwork_ping.m строка 452

© 2014–2017 Hammerspoon contributors
Licensed under the MIT License.
https://www.hammerspoon.org/docs/hs.network.ping.echoRequest.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API