2011-11-24 73 views
1

我正在做一個端口掃描程序,作爲使用原始套接字的學校項目的一部分。我的理解是這樣的:在pthreads原始套接字中接收數據包

當使用多線程處理原始套接字時,每個pthread都不會獲得NIC看到的數據包的副本。因此,爲了處理所有不同的線程,我需要一個將消息傳遞給正確線程的接收線程。

這是正確的嗎?

編輯:我的假設是,操作系統只發送一次數據包到進程。如果錯誤的pthread正在接收數據包,則數據包可能會丟失。

回答

3

我想如果你想在所有線程中接收數據包,你只需要在每個線程中創建一個單獨的原始套接字(具有相同的參數)。我還沒有找到一個很好的資源描述這個在Linux上,但這是它是如何documented在Windows上:

如果幾個SOCK_RAW套接字是在同一時間在計算機上打開, 相同的數據報可被傳遞到所有打開的插座