2009-12-22 96 views
0

有沒有辦法之前操作系統的使用C++或任何語言的內核收到它來控制通過網卡從特定地址Internet的數據networkcard?訪問的數據通過使用C++

換句話說, 有沒有辦法使用C++來訪問OSI七層模型來控制數據通過七層的任何層,或者它們只是邏輯實現。

如果它們不是邏輯實現的,你可以訪問 我希望訪問通過從特定地址收到的物理層的包,並在它們移動到下一層之前執行一些操作。

也是否有任何OSI模擬軟件?

+0

這可能會有助於提到你想要做的操作系統;) – 2009-12-22 00:19:27

回答

4

設備驅動程序位於硬件和內核之間,所以這是您唯一的選擇。它取決於操作系統,但可以用C++編寫一個設備驅動程序,用於所有主要的驅動程序。儘管準備遇到簡單的C接口。

+0

OP將需要一個內核模塊問題什麼,這是正確的答案。 – 2009-12-22 01:27:30

+0

也是,實現將會根據底層操作系統而有很大差異。在每個平臺上都不會有單一的實現。 – 2009-12-23 11:37:08

2

您是否問一個不可信的應用程序是否可以控制操作系統認爲來自網絡的內容?

答案應該很明顯。

大多數操作系統都提供了接口訪問脫落網絡的原始數據,你應該使用這些,而不是試圖網卡和操作系統之間楔入自己。

另外,C++!= C#。差遠了。

2

你可以設想創建一個分層的服務提供者,它可以通過將自身插入到winsock棧中來截獲數據,但是這不會使通過內核和NDIS層的數據在Windows中短路。你唯一真正的解決方案是設備驅動程序。此外,還有一些網卡在硬件中實現自己的TCP/IP堆棧,您可以直接與這些網卡通信,但這些並不常見。這些方法中的任何一種都不是微不足道的,而且您正在尋找許多內核模式C.如果您對此不滿意,則不應該嘗試這種方法。

你也可以考慮使用WinPcap的,因爲這會給你很多你所需要的功能。

+0

+1 winpcap;還有Unix/Linux的libpcap(其中winpcap是一個端口)。這會讓你的數據包脫離線路,但它們仍然直接傳遞到IP棧。我不知道是否有辦法使用pcap插入數據包,修改它們,然後將它們傳遞給堆棧,這聽起來像OP想要的。 – ceo 2009-12-22 16:16:44