Neo*_*o_b 5 networking assembly raw-sockets
我希望在汇编程序中编写一个能够发送和接收网络数据包的可启动程序.我不想使用任何库,我想自己创建它(也可以在学习的同时学习).不幸的是,我无法找到有关与最低级别网卡通信的任何信息(发送原始套接字).我认为有必要使用OUT和IN说明,虽然我找不到任何有关分配给网卡的端口的信息(或者如何找到它,如果它不总是相同的话).有人能指出我正确的方向吗?;-)
这是一个需要解决的大问题.即使达到"原始套接字"这一点也会有相当多的工作.
首先,使用现代BIOS,默认情况下通常不会配置您的网卡,因此您需要处理PCI配置以将其配置为具有处理器可见的某些端口.这将为您提供使CPU实际与网卡通信的基本功能.
其次,你必须找到它碰巧使用的特定芯片组的一些文档,这样你就会知道如何读写网络数据.对于一些较旧的卡,这非常简单,但大多数较新的卡充当散布/聚集硬件的总线主控器.对它们进行编程以进行简单的传输可能非常重要.这完全取决于硬件.
第三,您需要开发IP堆栈的大部分才能使用原始套接字.在硬件级别,您基本上有两个功能:接收任何正在到达的数据包,并将数据包发送到指定的MAC地址 - 或其他硬件地址,如果您的卡不是(并且看起来不像)以太网.
接下来的几层将是一个ARP解析器(让你使用IP地址而不是MAC地址)和一个DNS客户端(所以你可以使用普通的地址名称,而不是像点四边形那样.除此之外,你可能想要构建知道如何创建/理解IP数据报的软件.
不同的网卡有不同的硬件接口(这就是为什么它们有不同的设备驱动程序)。
您可能会从设备制造商那里获得有关硬件的信息(也可能不会:他们可能会将其视为专有信息,并编写自己的设备驱动程序)。
您还可以通过查看开源网卡的源代码来获取该信息:例如,我猜是针对 Linux 的;或者也许是Crynwr 数据包驱动程序。