Внедрение нового маршрутизируемого протокола в python - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь создать простой прототип маршрутизатора в python, с помощью которого я могу тестировать новые маршрутизируемые протоколы; скажем, недавно созданный IPv7. Из того, что я понял, я не могу использовать сокеты (socket.AF_ INET) без изменения файла sys / socket.h. Если да, то как мне сериализовать вновь составленный маршрутизируемый протокол?

raw_socket также не сработает, поскольку пакеты не являются IPv4. Я предполагаю, что IPv7 будет похож на протокол инкапсуляции для IPv4. Интересно, как люди внедряют новые протоколы или повторно внедряют старые, скажем, IPX или AppleTalk, в Python?

Есть идеи о том, как я могу подойти к этому? Или единственный способ go это хардкор C?

1 Ответ

1 голос
/ 11 февраля 2020

socket.AF_INET - это сокет уровня IP, что означает, что ОС отвечает за передачу уровня IP.

Однако вы можете использовать сокет AF_PACKET, который позволяет работать с кадрами (L2) напрямую. От man 7 packet:

PACKET(7)                                                                    Linux Programmer's Manual                                                                                          PACKET(7)

NAME
       packet - packet interface on device level


SYNOPSIS
       #include <sys/socket.h>
       #include <linux/if_packet.h>
       #include <net/ethernet.h> /* the L2 protocols */

       packet_socket = socket(AF_PACKET, int socket_type, int protocol);

DESCRIPTION
       Packet sockets are used to receive or send raw packets at the device driver (OSI Layer 2) level.
       They allow the user to implement protocol modules in user space on top of the physical layer.

В python константа равна socket.AF_PACKET ( ссылка )

...