有沒有任何可行的替代Winsock for C++?我需要的原因是因爲Winsock的原始套接字不能正常工作(不,這不能解決,不要浪費你的時間)並且WinPCAP只能監視網絡流量,而不能實際接收數據包。我需要一些可以接收完整數據包的東西,包括任何IP,UDP,TCP標頭等。是否存在這樣的事情,如果不存在,爲什麼不呢?Winsock的替代(不,不WinPCAP)
回答
你可以看看Boost.Asio。 C++跨平臺IO庫。支持UDP,TCP和ICMP。
這樣你就可以收到整個數據包,包括所有標題和所有內容? – Chroma 2010-08-16 02:25:11
Boost.Asio封裝了BSD套接字庫。看到Winsock可以做到這一點(Winsock也是基於BSD套接字),那麼Asio就可以做到這一點。 basic_socket類包裝'ioctl'函數。 – Anthony 2010-08-16 02:37:25
是的,boost可以保證你收到整個數據包。看看http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/reference/async_read.html – Default 2010-08-23 09:23:48
WinPcap的只能監控網絡流量,沒有實際接收數據包
監控網絡流量相當於接收數據包。這正是Wireshark所做的工具:讀取網卡並重建數據包邊界。
我
這是非常有可能使用Winsock API需要的東西,可以得到完整的數據包,包括任何IP,UDP,TCP報頭,等等。看看WSAIoctl
函數,特別是SIO_RCVALL
選項 - 啓用該選項將在接口上接收的所有數據包傳遞到套接字。這些是以IP頭開始的原始IP數據包。
沒有,監控流量不等於接收數據包,因爲當你監督,你只觀察談話的其他項目無法參與。我不想收到網絡上的所有數據包,我只想要那些我通常會得到的數據包,但我想要標題。 – Chroma 2010-08-16 02:41:39
難道你不能寫一個函數,將所有的數據包縮小到你想要的數據包,並將這些數據傳遞給系統的其餘部分? – Thanatos 2010-08-16 02:46:36
@Chroma:原始數據包本身不對應任何應用程序。這是頭文件中的端口號,它們將它們引導至正確的程序。所以你有兩種選擇:要麼得到所有的原始數據包,要麼自己過濾它們,要麼讓操作系統爲你做這件事並丟失頭文件。 – casablanca 2010-08-16 02:53:58
- 1. Winsock的跨平臺替代品?
- 2. VB.NET 1.1 Winsock替換
- 3. 與使用winPcap代替套接字相關的風險
- 4. winsock資源不足
- 5. 的Winsock的recv()不阻止
- 6. Winsock使用不同版本
- 7. winsock不支持讀/寫
- 8. C++ Winsock recv不會阻塞
- 9. Winsock在VB.net不工作
- 10. 替代不存在
- 11. Underscore.js不替代值
- 12. linux上的winpcap
- 13. Perl的替代不工作
- 14. 用+代替||是不好的?
- 15. 紅移不可替代的
- 16. Winsock的服務器代碼不使用MinGW
- 17. Winsock recv()返回不正確的數據
- 18. Winsock recv在不同的線程
- 19. Winpcap - pcap_next_ex vs pcap_loop
- 20. 回覆:替換爲&不包括&代替
- 21. Python:Sub並不會替代替換模式
- 22. python替換不會用「\」代替「'」
- 23. MYSQL替換成永不替代?
- 24. 後綴不會替代%s
- 25. SED不能代替預期
- 26. 替代計劃數不同
- 27. UBB /笑臉不會替代
- 28. PHP str_replace不替代字符「°」
- 29. MyISAM替代不是InnoDB嗎?
- 30. 不能代替場VerticalFieldManager
我要浪費我的時間問:爲什麼它不爲你工作?如果你要聲稱[適用於其他人的產品]不起作用,那麼你應該至少花一兩句話來支持它。 – Thanatos 2010-08-16 02:32:51
解釋時間太長,會導致更多問題。 – Chroma 2010-08-16 02:39:27
你是對的 - 它通常導致更多的問題,並且大多數時候(特別是當OP沒有解釋他們的情況時),這導致我們發現他們沒有正確使用[適用於其他人的產品]。例如,幾乎每個「我認爲我在GCC中發現了一個錯誤」帖子。因此,我問時間浪費的問題。 – Thanatos 2010-08-16 02:43:25