C或C ++中是否有任何原始TCP库?

时间:2011-12-02 09:32:47

标签: c++ windows tcp network-programming kernel

我将创建建立TCP连接的内核模式驱动程序级应用程序,这是我的要求:

  1. 我不希望将数据传递给用户模式
  2. 我不想使用winsocket和OS套接字库
  3. 我需要将tcp数据包传递给库并且 该库为我创建简单的TCP客户端或TCP-Server连接。它应该执行所有TCP连接要求,如tcp握手,生成数据包,计算校验和,设置TCP标志和确认,然后将新数据包提供给我,以便我可以将数据包发送到我的网络适配器。
  4. 您是否知道退出TCP实现它不使用OS套接字库?

2 个答案:

答案 0 :(得分:3)

我认为提出这个问题的正确方法是:

  

在内核代码中执行TCP套接字的正确方法是什么?

而且我不确定你是否只想在数据包级别进行TCP,因为你也可能想要处理TCP分段,IP分段,仅在远程窗口大小允许时发送,以及生成ACK。换句话说,如果您在内核模式下执行TCP服务器,则需要整个内核TCP堆栈。

无论如何,Bing或Google都在寻找“内核套接字”或“ksocket”。

对于Linux:http://ksocket.sourceforge.net/另外,请查看this example以获取UDP。

对于Windows:转到this page并下载HttpDisk和KHttpd示例。两者都具有Windows设备驱动程序,而不是使用类似的“ksocket”库。 (在每个中查找ksocket.c和ksocket.h)

答案 1 :(得分:1)

对于Linux,请使用常用套接字API的kernel_*()版本,即kernel_bind()kernel_listen()kernel_accept()kernel_connect()。它们位于#include <linux/net.h>中,其使用方式与“普通”套接字非常相似。

Solaris具有非常相似的接口,名为ksocket_*(),请参阅#include <sys/ksocket.h>以获取参考。

对于* BSD UN * X风格,Apple的Network Kernel Extensions Guide提供了一些细节(也参考了Free / Net / OpenBSD上相应的接口)。

不了解Windows。