2011-12-02 27 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。

相關問題