1

libpcap を使用して、.pcap ファイルに保存されたパケットの再生を実装しようとしています。プロセスは非常に簡単です。「pcap_open_offline」で pcap ファイルを開き、 で開いたデバイスにパケットを渡し、インターフェイス経由pcap_open_liveで で送信しpcap_injectます。

現在、NIC にはイーサネット ケーブルが接続されていません。開いたデバイスが送信をサポートしているかどうかがわからpcap_open_liveないことがわかっているので、pcap_inject ( errno 100) からエラーが発生します。これは予想されることですか?コマンドラインから単にtcpreplayを使用すると、イーサネットケーブルが接続されているかどうかに関係なく、終了し、エラーは表示されません。

tcpreplay/tcpedit が「デッド」インターフェースをどのように処理するか知っている人はいますか? tcpreplay はパケット ヘッダーを書き換えますが、生で送信しようとしていますか? どんな助けでも大歓迎です!

私はUbuntu 14.04を使用しており、インターフェースはアドレスレスで無差別モードです:

auto eth1
iface eth1 inet manual
    up ifconfig eth1 promisc up
    down ifconfig eth1 promisc down
4

1 に答える 1

1

現在、NIC にはイーサネット ケーブルが接続されていません。

では、その NIC でパケットを送信すると、どのような有用な結果が得られると期待できますか?

pcap_open_live開いたデバイスが送信をサポートしているかどうかがわからないことはわかっています

デバイスが稼働しているかどうかは時間の経過とともに変化するpcap_open_live()可能性があるため、実際にパケットを送信しようとするまでに得られる回答が正しくない可能性があります。

そのため、pcap_inject ( errno 100)からエラーが発生します

Linux errno.h で 100 を検索すると、次のことがわかります。

#define ENETDOWN    100 /* Network is down */

send()Linux ネットワーキングは、libpcap が行っているシステム コールでダウンしているインターフェイスにパケットを送信しようとすると、気に入らないと思います。

これは予想されることですか?

はい。

コマンドラインから単にtcpreplayを使用すると、終了してエラーは表示されません

tcpreplay には、パケットの送信に使用するさまざまなメカニズムが多数あります。tcpreplay ソースのソース ファイルを参照sendpacket()してください。sendpacket.cそれらのいくつかは、たとえば、エラーを報告するのではなく、機能していないインターフェイスで送信されているパケットを静かにドロップする可能性があり、それらのメカニズムの 1 つを使用している可能性があります。

于 2015-10-08T06:11:52.143 に答える