我正在尝试用python构建一个简单的路由器原型,我可以用它来测试新的路由协议;比方说新构建的IPv7。据我所知,如果不修改sys/socket.h文件,我就不能使用套接字(socket.AF_INET)。如果是这样,我将如何序列化新组成的路由协议?
由于数据包不是IPv4,因此raw_socket也不会起作用。我设想IPv7将类似于IPv4的封装协议。我想知道人们是如何在Python中实现新协议或重新实现旧协议的,比如说IPX或AppleTalk?
我该怎么做,你有什么想法吗?或者唯一的办法就是硬核C语言?
发布于 2020-02-11 21:30:58
socket.AF_INET是IP级别的套接字,这意味着操作系统负责处理IP层。
但是,您可以使用允许您直接处理帧(L2)的AF_PACKET套接字。来自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)
https://stackoverflow.com/questions/60141014
复制相似问题