2011-12-02 105 views
-2

我将创建一个建立一个TCP连接内核模式驱动程序级别的应用程序,这是我的要求:C或C++中是否有任何原始TCP库?

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

你知道退出TCP实现它不使用OS套接字库吗?

+0

重新创建winsock?真? – cHao

+2

OS标签(Window,linux ...)比编程语言标签(C++)更有用。 – curiousguy

+0

你能告诉我们你到目前为止发现了什么吗? –

回答

3

我觉得问这个问题的正确方法是这样的:

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

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

无论如何,Bing或谷歌周围的“内核套接字”或“ksocket”。

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

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

+0

我想我没有正确描述这个问题。我自己监控和修改以太网数据包,如果我使用OS套接字库甚至是内核套接字,那么操作系统使用自己的网关,自己的以太网或VPN网络。其实我已经在以太网网络上创建了一个奇怪的层,并且已经可以很好地处理UDP,现在我也需要创建TCP连接,问题是实现和连接(如握手和其他东西)非常耗时。 我的项目拥有MIT许可证,如果有的话,我可以使用大多数开源项目。 – Madnik7G

+0

更多细节 - 你真的想做什么? – selbie

+0

好吧,明白了。你今天得到了一个包过滤解决方案,但是你需要扩展它来建立外部连接。仍然不确定你为什么不能使用kso​​ckets。 P2P和隧道是我个人项目的两大利益。很想通过电子邮件讨论这个问题。 – selbie

1

对于Linux,使用kernel_*()版本通常的套接字API的,即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。

相关问题