7

スタンドアロンTCPスタックを実装するPythonライブラリはありますか?Python TCPスタック実装

通常のpythonソケットライブラリを使用することはできません。これは、ソケットを介してパケットのストリームを受信して​​いるためです(このソケットを介して私にトンネリングされています)。特定のポート宛てのTCP SYNパケットを受信すると、接続を受け入れて(syn-ackを送信し)、もう一方の端が送信したデータを取得します(適切にack'ingしてください)。

すでに使用されているTCPスタックがあると思っていました。何か案は?私は過去にCプロジェクトでlwipを使ってきましたが、Pythonのこれらの行に沿ったものは完璧です。

+2

結局、かなり基本的なTCPスタックをPythonで実装しました。それは私が取り組んでいるプロジェクトに必要なものですが、いくつかの作業を使うことができます。とにかくそれを見たいと思えば、ソースはここにあります:http://github.com/dound/vns/blob/master/TCPStack.py –

答えて

7

あなたが作業しているプラ​​ットフォームについては言及していませんが、Linuxで作業している場合は、tun/tap interfaceを開き、実際のネットワークインターフェイスとしてIPパケットをカーネルに戻してください。そのトリッキーなTCPのもの。

これは、たとえばOpenVPNが動作する方法です。UDPまたはTCPを介して生のIPパケットを受信し、tun/tapインターフェイスを介してカーネルにトンネルします。

Windows用のOpenVPNポート用に開発されたWindows用のtun/tapインターフェイスもあると思います。

+0

私はこの考えが好きです。私はLinuxを使用しているので、tun/tapデバイスとtap0 intf設定を取得するのは難しくありませんでした。残念ながら、私はそれをどうやって使うのか迷っています。まず、rawのカプセル化されていないパケットをtap0(rawソケット付き)に書き出します。私は正しくSYNパケットがtap0(tap0のMACとIPアドレスにアドレス指定された)に現れるのを見る。しかし、もし私がnetcatをtap0のIPアドレスを聞いて実行すると、私はそれがsyn-ackで応答するのを見ません。私はそれをtelnetで接続することができます(ただし、カーネルはこのトラフィックをlo経由でショートカットするだけです)。 どのように私はこれを動作させることができるかについての任意のポインターですか?おかげでニック! –

1

これはPythonに直接関係するものではありませんが、ネットワーク処理を重視する場合は、Pythonの代わりにErlangを考慮する必要があります。ただ、提案あなたが冒険を感じる(とあなたの側に多くの時間を持っている)場合は本当に...あなたはいつも... ;-)

+0

なぜErlangが特別なのですか?なぜCじゃない? C++? Java?等... – jmucchiello

+1

Erlangは非同期処理を行うために非常によく機能するため、 – jldupont

+1

私はこれを投票しました。投票した人は自分自身を恥じるべきです。誰かにツールの要件を質問するのに間違いはありません。それが言った - なぜerlangは具体的に? –

0

をツイストでこれをやってショットを取ることができますあなたはctypesを使用することができるかもしれませんモジュールを使用してlwipをインポートし、再度使用します。

+0

悪い考えではありませんが、これは私がこれよりも多くの作業を必要とすると思います。 –

2

Scapyを一瞥すると、これらの低レベルの状況を処理できるようです。私はそれを自分で使っていないので、あなたが説明したことを確認できません。私はドキュメンテーションを見てきました。

+0

Scapyはきちんとしていますが、プロトコル自体を処理するのに役立つとは思っていません。パケットをその構成フィールドにデコードするだけです。 –

0

ソケットのもう一方の端にあるソフトウェアにすでにコミットしている場合は、TCPパケットが転送されます。次に、TCPWatchがSYNパケットを取得する方法を示します。 SCAPYは確かにあなたが望むパケットを正確に送信するのには威力を発揮しますが、それがプロキシとして機能するかどうかはわかりません。あなたが送信側にあるものにコミットされていない場合

http://hathawaymix.org/Software/TCPWatch

しかし、その後、SSH転送を行うためにツイストコンクやParamikoを使用することを検討してください。暗号化を必要としない場合でも、CPUに与える影響が小さいブローフィッシュでこれらを使用することはできます。これは、SSHが標準化されているため、SSHソフトウェアが動作するように、反対側にConchが必要という意味ではありません。 SSHの世界では、これは通常「ポート転送」と呼ばれ、SSH端末クライアントを使用してSSHサーバにログインし、ポート転送トンネルを設定します。 ConchとParamikoはこれをPythonアプリケーションに組み込むことができるので、SSH端末クライアントは必要ありません。

関連する問題