Невозможно отправить пакеты через RAW_SOCK в OSX - PullRequest
1 голос
/ 26 сентября 2019

После долгих поисков и чтения документов я наткнулся на стену при использовании RAW_SOCK в OSX для отправки пользовательских пакетов IPv4 + UDP с использованием семейства AF_INET

Учитывая примеркод (в Python) ниже:

import socket

ip_packet = <full code below> 

raw_sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
raw_sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
raw_sock.sendto(ip_header + udp_header, ("1.1.1.1", 0))

Я получаю OSError: [Errno 22] Invalid argument.Я подозреваю, что что-то не так с тем, как я создаю IP-пакет, однако, учитывая, что это работает в Linux и всех других BSD, я не совсем уверен, какие части заголовка я построил неправильно.Единственное поле

Есть ли какие-либо документы, охватывающие Дарвинса RAW_SOCK?В частности, какие заголовки должны быть какими значениями (и порядком байтов?)

Я собрал здесь грубый код, который иллюстрирует то, что я пытаюсь сделать: ссылка

...