使用C++访问网络数据的访问数据 在C++或任何语言使用操作系统内核之前,有没有一种方法可以从网卡的特定地址控制来自互联网的数据?

使用C++访问网络数据的访问数据 在C++或任何语言使用操作系统内核之前,有没有一种方法可以从网卡的特定地址控制来自互联网的数据?,c++,networking,models,osi,C++,Networking,Models,Osi,换句话说,, 有没有一种方法可以使用C++来访问OSI七层模型来控制通过七层的任何层的数据,或者它们只是逻辑上实现的。 如果它们没有逻辑实现,您可以访问 我想访问通过从特定地址接收的物理层的包,并在它们移动到下一层之前执行一些操作 还有OSI的模拟软件吗?你是否在问一个不受信任的应用程序是否可以控制操作系统从网络上看到的东西 答案应该是显而易见的 大多数操作系统都提供了访问来自网络的原始数据的接口,您应该使用这些接口,而不是试图将自己夹在网卡和操作系统之间 也,C++!C.甚至不接近。设备驱动程

换句话说,, 有没有一种方法可以使用C++来访问OSI七层模型来控制通过七层的任何层的数据,或者它们只是逻辑上实现的。 如果它们没有逻辑实现,您可以访问 我想访问通过从特定地址接收的物理层的包,并在它们移动到下一层之前执行一些操作


还有OSI的模拟软件吗?

你是否在问一个不受信任的应用程序是否可以控制操作系统从网络上看到的东西

答案应该是显而易见的

大多数操作系统都提供了访问来自网络的原始数据的接口,您应该使用这些接口,而不是试图将自己夹在网卡和操作系统之间


也,C++!C.甚至不接近。

设备驱动程序位于硬件和内核之间,所以这是您唯一的选择。它取决于操作系统,但是可以在C++中为所有主要的设备编写设备驱动程序。不过,请准备好使用普通的C接口。

您可以创建一个分层服务提供程序,通过将自身插入winsock堆栈来拦截数据,但这不会使通过windows内核和NDIS层的数据短路。这里唯一真正的解决方案是设备驱动程序。此外,有些网卡在硬件中实现了自己的TCP/IP堆栈,您可以直接与它们通信,但这些并不常见。这些方法中的任何一种都不是微不足道的,而且您正在研究很多内核模式C。如果您对此不满意,您不应该尝试这种方法


你也可以考虑使用WiPCAP,因为这会给你很多你需要的功能。p> 提到你想在哪个操作系统上做这件事可能会有帮助;无论如何,OP都需要一个内核模块,这是正确的答案。此外,根据底层操作系统的不同,实现也会有很大的不同。不会有一个单一的实现在每个平台上工作;还有libpcap,其中winpcap是Unix/Linux的一个端口。这将使数据包脱离网络,但它们仍然会直接传递到IP堆栈。我不知道是否有一种方法可以使用pcap来交换数据包,修改它们,然后将它们传递到堆栈上,这听起来像是OP想要的。