2012-10-31 35 views
2

我正在編寫NAT的實現,並且需要使用原始套接字。我已經習慣了Twisted體系結構,並且喜歡它如何處理併發連接。是否有可能使用Twisted(Python)的原始套接字

進入Twisted協議的數據被處理,NAT,列表併發送出原始套接字。進入原始套接字的數據被操縱,查找,NAT,並被引導至適當的協議實例。

只有一個原始插座就足夠了嗎?如果大量的連接同時進入,會怎麼樣?不扭曲處理,或者在無連接協議中扭曲非常不利。如果有優勢,任何人都可以指示我一個原始插座扭曲的例子

回答

3

扭曲支持無連接協議就好了。例如,參見listenUDP

twisted.pair中有處理IP級別協議數據的模塊,但並非所有模塊都可以使用; in particular, tuntap support does not work

我沒有這方面的例子,但據我所知,單個原始套接字應該沒問題。但是,您將需要編寫自己的運輸工具,將套筒包裝在IReadDescriptor/IWriteDescriptor and using IReactorFDSet中。但是,如果你足夠熟練地知道你首先需要原始套接字,這應該不會太難。

+0

你能詳細解釋一下最後一部分嗎?更具體地說,我的問題是我想在地址0.0.0.0上發送UDP,並在255.255.255.255上偵聽(與DHCP有關)。我想使用扭曲,因爲這是必須模擬許多客戶端,而不僅僅是一個DHCP客戶端。 – KillianDS

+0

我會很高興,但你能說一個更具體的問題嗎?如果你已經閱讀過這些接口的文檔,哪部分不清楚? – Glyph

0

在扭曲的源代碼中挖掘一下,你會發現twisted.pair,它不再被真正維護,但是會給你大約90%的你需要做的原始套接字。

我有一些示例代碼顯示瞭如何在BSD上使用/ dev/bpf。唯一需要注意的是它是純粹的python,所以沒有tcpdump風格的數據包過濾器(端口80和主機blah.com) - 你只需要從消防水帶中喝水。

+0

這是真的twisted.pair沒有看到很多工作,但我會爭辯說,它保持了,因爲我在過去的一年中,我自己花了很多小時。 :)這是一個具有挑戰性的領域,迄今爲止還沒有任何可發佈的結果 - 但我希望對Twisted 14.0有所改進! –

+0

我的歉意 - 沒有進攻意圖! :p上次我看twisted.pair的時間可能在12.0左右,所以我不得不重新熟悉自己。 – synthesizerpatel

相關問題