После долгих поисков и чтения документов я наткнулся на стену при использовании 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
?В частности, какие заголовки должны быть какими значениями (и порядком байтов?)
Я собрал здесь грубый код, который иллюстрирует то, что я пытаюсь сделать: ссылка