私は、ソケット経由で受信した生データパケットのヘッダを解析する単純なpythonスクリプトを書いています。スクリプトはVM上で実行され、別のVMがパケットを生成して送信します(どちらのVMもLinuxを実行しています)。これは、パケットを送信する前にカスタムヘッダーを作成し、そのスクリプトの目的全体がソケットを介して完全に傷つかないパケットを受信し、その内容を確認する設定の一部です。ソケットで受信したパケットからVLANタグが剥奪されないようにするには?
最初のヘッダーは、DMACおよびSMACの場合はそれぞれ6バイト、VLAN関連フィールド(TPID、PCPおよびID)の場合は4バイト、Ethertypeの場合は2バイトの標準イーサネットヘッダーです。
私が遭遇している問題は、VLANフィールド(4バイト)がパケットを受信する前に(パケットの残りすべてが存在する)パケットから削除されてしまうことです。私は2つのVM間のネットワークパスに沿った仮想HWのさまざまな要素に精通していませんが、ストリッピングがそこで行われていると思われます。ここで
は、私はソケットを開くために使用する方法である:
def openSocketToInterface(nicInterface):
ETH_P_ALL = 3 # To receive all Ethernet protocols
socketToInterface = socket.socket(socket.AF_PACKET, socket.SOCK_RAW,
socket.htons(ETH_P_ALL))
socketToInterface.bind((nicInterface, 0))
subprocess.check_call('ifconfig %s promisc' % (nicInterface),
shell=True)
return socketToInterface
は私が剥奪されることからVLANフィールドを防ぐことができます方法はありますか?
パケットは、レイヤ2フレームのペイロードです。イーサネット(レイヤ2)情報は含まれません。フレームをそのままキャプチャしようとする場合は、トランク接続を使用してインターフェイス間をブリッジする必要があります。 –