Как получить и изменить данные физического уровня, поступившие на сетевую карту, до передачи их в ОС?

если на физ.уровне, то под виндой можно заюзать NDIS-драйвер (Network) - это самый/нижний уровень, после которого идут TDI-драйвера (Transport).

У каждой сетевой железки есть свой минипорт-драйвер.
Через NDIS, минипорт-драйвер получает некоторые команды.
Функции минипорт-драйвера можно описать следующим образом:

• инициализация своего адаптера NIC;
• создание/включение/выключение/удаление сетевых подключений;
• перезагрузка и остановка адаптера;
• выдача клиенту или изменение параметров адаптера;
• оповещение ОС о состоянии адаптера;
• отправка/приём пакетов.

под линухом наверное так-же, хотя не уверен..

2