Как разбудить -в локальной сети -через Интернет с помощью кода Python?

Сgrep:

grep -Pio 'name="andy".*branch="\K[^"]*' file
  • -Pвключить регулярные выражения perl (PCRE)
  • -iигнорировать регистр
  • -oпечатать только совпадающие детали

В регулярном выражении \Kпредставляет собой поиск назад с нулевой шириной -, чтобы сопоставить часть перед \K, но не включать ее в сопоставление.

3
22.05.2021, 06:05
1 ответ

Сложность отправки пакетов Wake -по -LAN из-за пределов локальной сети заключается в том, чтобы заставить маршрутизатор отправить пакет в локальную сеть, чтобы полностью пассивный ПК1 мог его получить.

Магический пакет адресован внешнему IP-адресу маршрутизатора, что делает его одноадресным пакетом . Правило переадресации в маршрутизаторе указывает собственный IP-адрес целевого ПК в качестве внутреннего IP-адреса. Таким образом, в соответствии со стандартной процедурой пересылки одноадресного трафика маршрутизатор сначала делает запрос ARP, чтобы узнать MAC-адрес целевого ПК... но не получает ответа, поскольку целевой ПК выключен. Сетевой интерфейс, ожидающий пробуждения -для -пакетов LAN, находится в режиме -низкого -энергопотребления только для приема -:, обычно он не может отвечать на запросы ARP.

В случае сбоя запроса ARP маршрутизатор может отправить обратно пакет ошибки ICMP, указывающий, что «хост недоступен»… но модуль wakeonlan Python, похоже, не имеет средств для обработки такого ответа об ошибке, даже если предположить, что сообщение ICMP не фильтруется параноидальными брандмауэрами на обратном пути.

Тот факт, что MAC-адрес встроен в полезную нагрузку волшебного пакета, не помогает, потому что маршрутизатор не знает и не заботится об этом. Для маршрутизатора волшебный пакет — это просто еще один пакет TCP или UDP, который будет обрабатываться как обычно.

Вам нужно будет настроить правило пересылки, чтобы отправить магический пакет на широковещательный адрес внутренней сети, чтобы сделать его широковещательным. Таким образом, маршрутизатору не нужно будет делать запрос ARP перед передачей пакета во внутреннюю сеть. Итак, если сетевая маска вашей внутренней сети 255.255.255.0, то вы должны использовать 192.168.31.255 в качестве внутреннего IP-адреса в правиле переадресации.

Но... как @A.B упомянул в комментариях, маршрутизаторы на базе Linux -обычно не любят преобразовывать одноадресные рассылки в широковещательные, поэтому этот подход может не сработать.

Альтернативным решением было бы добавление записи статической таблицы ARP для целевого ПК в таблицу ARP маршрутизатора, чтобы ему не нужно было делать запрос ARP, а можно было бы просто пересылать пакет во внутреннюю сеть.

Быстрая проверка исходного кода показала, что модуль Python wakeonlan использует SOCK _DGRAM, что означает, что он использует UDP. Таким образом, вы должны иметь возможность изменить правило пересылки с «TCP и UDP» на «только UDP».

5
28.07.2021, 11:32

Теги

Похожие вопросы