2011-06-04 32 views
1

我必須使用Linux內核libnetfilter_queue(恰恰是python綁定)和dpkt來過濾和修改網絡流量,並且我試圖實現延遲數據包轉發。Linux libnetfilter_queue延遲數據包問題

普通過濾作品真的很好,但如果我嘗試使用功能延遲包這樣

def setVerdict(pkt, nf_payload): 
    nf_payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt)) 


t = threading.Timer(10, setVerdict, [pkt, nf_payload]) 
t.start() 

它crashs拋出也不例外(當然是低水平崩潰)。我是否可以直接使用libnetfilter來實現延遲?或者我必須複製pkt,放下它並使用標準socket.socket.send()發送複製?

謝謝

回答

3

對不起,對於遲到的回覆,但我需要做這樣的事情,雖然稍微複雜一點。我使用了庫的C版本,並將數據包複製到程序中的緩衝區中,然後發出DROP判定。在與您的延遲有關的超時之後,我使用原始套接字重新輸入數據包。這工作正常,似乎很有效。

我認爲你崩潰的原因是因爲你沒有足夠快地發出判決。

+0

請問,你能提供一些這個答案的代碼示例嗎? 有關libnetfilter_queue的文檔相當薄弱。 – elmazzun 2015-06-24 13:46:41

0

我不能回答你的問題,但爲什麼不使用「netem」交通隊列模塊的輸出接口上耽誤包?

有可能配置tc隊列來對以某種方式「標記」的數據包應用不同的策略;標記這些數據包的常用方法是使用netfilter模塊(例如iptables或nfqueue)。

+0

我必須使用libnetfilter_queue:| – Emilio 2011-06-05 20:27:12