ОС Contiki: установите режим Promiscuous и получите все пакеты UDP
Я пытаюсь сделать следующее:
а) Установите Contiki в случайном режиме.
b) Затем извлекаются все пакеты UDP и RPL, отправленные не только текущему узлу, но и между двумя другими узлами в пределах дальности связи.
У меня есть следующий код:
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, 0);
simple_udp_register(&unicast_connection, 3001,
NULL, 3000, receiver);
где приемник является соответствующей функцией обратного вызова. Я могу собирать пакеты UDP, отправленные текущему узлу, но все еще не могу получать пакеты, отправленные между другими узлами в моем диапазоне связи.
1 ответ
Настройка RADIO_PARAM_RX_MODE
только контролирует, какие пакеты отфильтровывает драйвер радиосвязи. В сетевом стеке ОС имеется несколько уровней, из которых драйвер радиосвязи является только первым. Следующими являются RDC и MAC, которые по-прежнему отфильтровывают пакеты, адресованные другим узлам, и нет API, чтобы отключить это.
Решение состоит в том, чтобы либо изменить MAC, чтобы отключить сброс пакетов, не адресованных в локальный режим, либо написать свой собственный простой MAC. Последнее - то, что делает Sensniff (анализатор пакетов Contiki) - см. Его README и исходный код. Кстати, если вы просто хотите регистрировать все полученные пакеты, просто используйте Sensniff!