Отправить запрос Wake on Lan (WoL) вручную через кабель Ethernet, используя Arduino или Raspberry Pi

1

Я пытаюсь создать схему, которая "перехватывает" кабель Ethernet, прежде чем он входит в компьютер, что позволяет мне отправить " Волшебный пакет «через кабель вручную - нажатием кнопки, например.

Насколько я мог понять, чтобы сделать Wake on Lan, вы должны отправить 6 байтов 255 (FF FF FF FF FF FF в шестнадцатеричном формате), за которым следуют шестнадцать повторений MAC-адреса целевого компьютера - всего 102 байта. (источник: Википедия ) , Мне просто трудно понять, как отправить этот волшебный пакет вручную, а не через маршрутизатор (если это возможно).

Набросок ниже иллюстрирует то, что я пытаюсь сделать.

Rough sketch

Кабель Ethernet имеет 8 проводов, интересными для этого, вероятно, нет. 1, 2, 3 и 6 - TX +, RX-, RX + и RX- ( иллюстрация ) ,

Я пытаюсь определить, как работает этот конкретный последовательный протокол и как его использовать на практике на плате разработки, такой как Arduino. Этот сайт говорит, что это может быть "RS423" или "RS422".

Итак, мой вопрос: Можно ли сделать то, что я пытаюсь сделать? И если да, то как мне правильно отправлять волшебный пакет?

Albert MN.
источник

Ответы:

1

Как вы писали, волшебный пакет WoL (фрейм) содержит последовательность в любом месте в своем потоке данных.

Обычно пакет WoL отправляется с использованием протокола более высокого уровня, поскольку это проще сделать. Просто отправьте пакет UDP (возможен любой порт, обычно 0, 7 или 9), содержащий последовательность, на широковещательный адрес 255.255.255.255.

Удачи в кодировании потока Ethernet, хотя - это не так же просто, как RS422 / 423.

Перед линейным кодированием необходимо создать кадр Ethernet, которому предшествует последовательность преамбулы / SOF, затем заголовок кадра (используйте Ethertype 0x0842), за которым следует магический шаблон. В зависимости от механизма WoL, вам, вероятно, потребуется заполнить кадр до минимального размера (64 без преамбулы / SOF) и вычислить правильную последовательность проверки кадра (FCS).

Затем кадр должен быть закодирован. 10BASE-T использует простой манчестерский код (01 = "1" и 10 = "0"). 100BASE-TX использует строчный код 4b / 5b. 1000BASE-T использует гораздо более сложный строковый код, который, вероятно, выходит за рамки вашего проекта. Скорее всего, ссылка WoL - 10BASE-T, так что это выполнимо. Если вы не можете захватить существующую связь WoL, вам также необходимо генерировать регулярные импульсы связи, чтобы дальняя сторона «связывалась».

В общем, это будет много проще разбудить аппарат, используя другой метод, если вам не нужно делать это по сетевому кабелю.

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

Zac67
источник