在 python 中实施新的路由协议
Implementing new routed protocol in python
我正在尝试在 python 中构建一个简单的路由器原型,我可以用它来测试新的路由协议;比方说新组成的 IPv7。据我了解,我不能在不修改 sys/socket.h 文件的情况下使用套接字 (socket.AF_INET)。如果是这样,我将如何序列化新组成的路由协议?
raw_socket 也不会欺骗,因为数据包不是 IPv4。我将 IPv7 设想为 IPv4 的封装协议。我想知道人们如何在 Python?
中实施新协议或重新实施旧协议,比方说 IPX 或 AppleTalk
关于如何解决这个问题的任何想法?还是只能硬核C?
socket.AF_INET
是IP层套接字,也就是说OS负责处理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
(link)
我正在尝试在 python 中构建一个简单的路由器原型,我可以用它来测试新的路由协议;比方说新组成的 IPv7。据我了解,我不能在不修改 sys/socket.h 文件的情况下使用套接字 (socket.AF_INET)。如果是这样,我将如何序列化新组成的路由协议?
raw_socket 也不会欺骗,因为数据包不是 IPv4。我将 IPv7 设想为 IPv4 的封装协议。我想知道人们如何在 Python?
中实施新协议或重新实施旧协议,比方说 IPX 或 AppleTalk关于如何解决这个问题的任何想法?还是只能硬核C?
socket.AF_INET
是IP层套接字,也就是说OS负责处理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
(link)