Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Необработанный сокет Micropython на уровне MAC

Автор вопроса: user8079Ответов: 1

Как именно можно создать необработанный сокет на уровне MAC в Micropython?

Эквивалент UNIX:

eth_p_all=3
netif='wlan0'
s=socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.htons(eth_p_all))
s.bind((netif,0))

Во-первых, непонятно, как получить имя интерфейса, и нет ни socket.AF_PACKET, ни socket.htons.

Итак, если нет возможности сделать это со стоковыми библиотеками или прошивкой, какие библиотеки выбрать, или если требуется модификация прошивки, то как именно модифицировать прошивку?

socketsethernetesp8266raw-socketsmicropython

Ответы

Ответ 1 · YuSheng

В текущей прошивке upy нет реализации необработанных сокетов. Вы можете проверить следующую строку. Необработанная диспетчеризация сокетов была удалена из modlwip.c.

https://github.com/micropython/micropython/blob/68a5d6fe7746850ce049b8bf295bfce1382383f3/extmod/modlwip.c#L712

Если вы хотите изменить прошивку самостоятельно, вы можете выполнить следующие действия.

  • Проверьте, поддерживает ли исходный SDK вашей платформы необработанный сокет. (например, cc3200 использует SDK cc3200 от TI и поддерживает необработанные сокеты)
  • Изменить modlwip.c

Есть неофициальный порт (серия ameba от Realtek), поддерживающий raw socket. Можно было бы начать с этого.

https://github.com/wylinks/micropython-ameba/blob/ameba/ports/ameba/mphelper/mods/modlwip.c

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы