我正在一个项目中工作,我需要通过自己和进程捕获网络数据包。我不能让现有的网络堆栈操作系统来处理这些数据包。我知道我可以使用pcap库来捕获数据包。但问题是相同的数据包,我使用pcap捕获将由exisitng OS网络堆栈处理。但我想只通过我的程序处理这些数据包,而不是通过操作系统处理。 请详细说明如何实现这一目标?
答案 0 :(得分:1)
使用预构建的内核和接口驱动程序,这将是不可能的AFAIK。如果您可以控制内核或接口设备驱动程序,可以查看以下几个地方。
您可以编写一个自定义设备驱动程序,该驱动程序将实现一个队列,您的用户空间应用程序可以读取该队列。
答案 1 :(得分:0)
我从来没有尝试过这个,但我相信你可以通过使用预载库来覆盖所有必要的网络功能(例如socket
,connect
,{{ 1}},listen
,bind
等)。重建会有很多重要的功能,但这是可能的。
我不知道这是最好的选择,但可能会根据您的要求进行调查。