2010-12-01 105 views
4

我想創建一個偵聽的TCP套接字,當它從客戶端收到初始SYN包後,我可以控制它何時響應客戶端的第一個SYN + ACK。我可以使用Linux中的原始套接字創建一個偵聽TCP套接字嗎?

我想這樣做來引入一些延遲或忽略一些初始SYN數據包。我現在可以使用iptables來做到這一點,但我想知道是否可以使用OS套接字接口來完成此操作。

請注意,如果我使用普通的TCP套接字,一旦服務器在套接字描述符上調用listen(),操作系統將在客戶端連接到它時建立連接。

我想知道如果我可以使用原始套接字來實現這種行爲。迄今爲止關於原始套接字的所有示例都是關於活動套接字(客戶端到服務器)而不是被動套接字(偵聽套接字)。

回答

0

我不明白爲什麼不。你在你面前有很多工作;-)我想象那裏已有的包或產品已經可以做這種事情了。

+0

這個答案非常廣泛,甚至可以用作「我可以使用網絡攝像頭掃描lolcats的圖片嗎?」的答案。 – 2012-06-12 13:47:45

3

理論上你可以寫原始套接字自己的TCP實現。但是,在原始套接字獲取副本之前,內核仍然會響應任何傳入的TCP數據包。所以你必須通過使用iptables或其他東西來解決此問題,以阻止內核看到你感興趣的數據包。

我認爲通過netfilter接口在內核模塊中執行此操作會更容易這可能是你現在正在做的)。你也可以檢查出libnetfilter_queue,如果你真的想在用戶空間中做到這一點,它可能會工作。

相關問題