SOCK_RAW
указывает, что пользовательская программа должна получить заголовок L2 (канального уровня) в сообщении. IPPROTO_RAW
применяет то же самое к заголовку L3 (IP).
Программа пространства пользователя устанавливает SOCK_RAW, IPPROTO_RAW
для ручного анализа или составления заголовков протокола пакета. Это гарантирует, что ядро не изменяет соответствующий заголовок уровня на пути к / из пользовательского пространства. Необработанный сокет не меняет способ получения или передачи пакета - они ставятся в очередь как обычно. С точки зрения сетевого драйвера, не имеет значения, кто устанавливает заголовки - пользовательское пространство (необработанные сокеты) или ядро (например, SOCK_DGRAM).
Имейте в виду, что получение необработанных пакетов требует возможности CAP_NET_RAW
- обычно программа должна запускаться с привилегиями суперпользователя.