/dev/net/tun
私はイーサネットフレームを送受信することができ、仮想ブリッジとVethのペアを使用してイーサネットネットワークカードとTapインターフェースを接続するための簡単なCプログラムを作成しました。
イーサネットカードをキャプチャするときに、蛇口から少しのトラフィックが発生するのを見たいです。問題は、私のパケットがTap0から来ているのを見て、ブリッジに到着するのを見ることです。しかし、イーサネットカードをキャプチャするときに何も到着するのを見ることはできません。
私は正直なところ、私が何をしているのかわからなかったので、netplan設定ファイルbrctl
とip
。ifconfig
同じサブネットのIPアドレスをbr0 tapとenp8s0に追加しようとしましたが、ブリッジに1つのIPアドレスのみを提供しようとしましたが、vethを使用しても常に同じ結果が得られます。
現在私の設定は次のとおりです。
#create tap0
sudo ip tuntap add tap0 mode tap
sudo ip link set tap0 promisc on
#create Br0
sudo ip link add br0 type bridge
sudo ip link set enp8s0 promisc on
#set to up
sudo ip link set br0 up #To add an interface br0s state must be up
sudo ip link set enp8s0 up #To add an interface its state must be up
sudo ip link set dev tap0 up #To add an interface its state must be up
#Adding the interface into the bridge is done by setting its master to bridge_name:
sudo ip link set enp8s0 master br0
sudo ip link set tap0 master br0
sudo ip addr add dev br0 192.168.4.10/24
私はTapファイル記述子にこの構造を書いています:
struct eth_hdr
{
unsigned char h_dest [6];
unsigned char h_source [6];
uint16_t ethertype;
unsigned char payload[];
} __attribute__((packed));
Wiresharkには有効なイーサネットフレームが表示されますが、どのソースMacが適切かはわかりません。
イーサネットヘッダをtap0からenp8s0に変更するにはどうすればよいですか?
答え1
ブリッジをスイッチと考えてください。つまり、パケットのみを表示できます。enpu8s0彼らがenpu8s0。
トラフィックを表示するには少なくとも3つのオプションがあります(特定の順序はありません)。
- トラフィックを直接送信enpu8s0MACアドレス
- ブロードキャストアドレスにトラフィックを送信するFF:FF:FF:FF:FF:FF
- スイッチをハブに切り替えます(すべてのポートでパケットを複製します)
brctl setageing <bridge> 0
。しかし、それは通常ブリッジが機能する方法ではありません。