libpcapにpcapファイルを読み取らせ、ユーザーにパケットを選択させ、libnetを使用してそのパケットを書き込もうとしています.
ファイル部分からの読み取りが完了しました。libpcap は、そのパケットを const unsigned char に入れます。以前に libnet を使用したことがありますが、libnet の高度な機能を使用したことはありません。libnet のビルド関数を使用してパケットを作成し、それをそのままにしておきます。libnet_adv_write_link()
libnet コンテキスト、inject(const uint8_t) へのパケットへのポインタ、およびパケットのサイズを取得する関数があることに気付きました。libpcap から取得した「パケット」を渡そうとしたところ、エラーなくコンパイルおよび実行されました。ただし、wireshark には何も表示されません。
これはこの問題に取り組む正しい方法ですか、それとも libpcap から読み取って、libpcap が読み取ったものに基づいて libnet で別のパケットを作成する必要がありますか?
編集:問題をある程度解決したと思います。libpcap でパケットを読み取ります。16 番目のバイト以降のすべてのバイトを別の uchar に入れ、それをワイヤに書き込みました。libnet_adv_write_raw_ipv4() を使用して、LIBNET_RAW4_ADV で初期化された libnet。おそらくドライバーのせいで、私はETHレイヤーに対してあまり力を持っていないと思います。したがって、基本的にはこのように自動的に書き込まれるようにし、新しい uchar パケットは、元のパケットの ETH レイヤーの後に残っているものです。これまでのところ正常に動作します。