私は、Pythonでトンネリングプロトコルを作成しようとしています。私はtunインターフェイスのセットアップを持って、それを通してすべてのトラフィックをルーティングします。 しかし、プログラムのtunインターフェイスにリダイレクトされているパケットを暗号化してサーバーに送信するにはどうすればよいですか? 私が見たところでは、socket.bind()またはsocket.setsockopt()関数のいずれかです。 これは私が今のところ使用したコードの私のインターフェイスのセットアップネットワークインタフェースからのパケットを読み込み、処理するために
そして、これです:
import os, sys
from select import select
f = os.open("/dev/tun0", os.O_RDWR)
os.system("ifconfig tun0 add 10.6.0.1 10.6.0.2")
os.system("ip route add 0/1 dev tun0")
try:
while 1:
r = select([f],[],[])[0][0]
if r == f:
packet = os.read(f, 4000)
print(str(len(packet)) + " : " + str(packet))
except KeyboardInterrupt:
print ("Stopped by user.")
os.system("ip route delete 0/1 dev tun0")
これは直接デバイスから読み込みます。個別にパケットを読み取るためにソケットライブラリを使用する方法はありますか?
ありがとうございました。
OS:MacOSのシエラ
promiscuousモードではないかもしれませんが、私のtun0インターフェイスはポイントツーポイント設定です。私の質問をもう一度見てください。詳細を追加しました。 –
どうしてですか?無差別モードのソケットとs.readfrom()を使用すると、パケットを取得し、それが誰から来たのかを知ることができます。 2つのスニッファ、1つはTCPと1つの捕捉UDPを持っていなければなりませんが、それは重要です。あなたは効率を助けるためにasyncoreを使用することもできます。しかし、OK、あなたは低レベルを選択しました。手動でパケットヘッダーを読み取る方法、つまりTCP&UDP仕様と追加のデバイスプロトコルが必要になることを知っておく必要があります。次に、structモジュールを使用してメタデータとコンテンツを抽出します。しかし、まずOpenVPNがどのようにそのトリックをするのか見てみることをお勧めします。構造体の使用のために – Dalen
thenewbostonには非常に良いガイドがあります。構造体のバージョンが機能しない場合、私はプロミスモードを使用します。ありがとうございます:-) –