PCAP_INJECT(3) | FreeBSD Library Functions Manual | PCAP_INJECT(3) |
名称
pcap_inject, pcap_sendpacket -パケットを転送する書式
#include <pcap/pcap.h>
int pcap_inject(pcap_t *p, const void *buf, size_t size);
int pcap_sendpacket(pcap_t *p, const u_char *buf, int size);
解説
pcap_inject() は、ネットワークインタフェースを通して生のパケットを送信します。 buf は、リンクレイヤヘッダを含んでいるパケットのデータを指し、 size は、パケットのバイト数です。たとえネットワークインタフェースのオープンが成功したとしても、パケットをそれに送信するパーミッションがないかもしれない、またはパケットの送信をサポートしていないかもしれないことに注意してください。 pcap_open_live() にはキャプチャする、送信するか、またはキャプチャして送信するためにオープンするどうかを示すためのフラグがないので、送信をサポートするオープンを要求できず、送信が可能となるかどうかをオープン時に通知されます。また、いくつかのデバイスは、送信パケットをサポートしないかもしれないことに注意してください。
いくつかのプラットフォームで、ソースリンクレイヤアドレスは、ヘッダがそのようなアドレスを含んでいるなら、そしてプラットフォームが完全に生で変更されないパケットの送信をサポートしないなら、それが送信したパケットで、インタフェースに割り当てられたアドレスとなるように変更されるかもしれないので、送信したパケットのリンクレイヤヘッダは、 pcap_inject() に供給されたパケットのリンクレイヤヘッダと同じでないかもしれないことに注意してください。さらに悪いことに、いくつかのプラットフォームのいくつかのドライバは、通常、完全に生で変更されないパケットの送信をサポート する プラットフォームでさえ、リンクレイヤタイプフィールドをデバイスにアタッチするとき、libpcap が使用するどんな値にも変更するかもしれません。
pcap_sendpacket() は、 pcap_inject() に似ていますが、書き込まれたバイト数を返すのではなく、成功すれば 0 を返します。 ( pcap_inject() は、OpenBSD に由来します。 pcap_sendpacket() は、WinPcap に由来します。両方とも互換性のために提供されています。)
戻り値
pcap_inject() は、成功すれば書き込まれたバイト数を返し、失敗すれば-1 を返します。pcap_sendpacket() は、成功すれば 0 を返し、失敗すれば-1 を返します。
-1 が返されるなら、 pcap_geterr() または pcap_perror() は、取って来るか、またはエラーテキストを表示する引数として p を付けて呼び出されます。
関連項目
pcap(3), pcap_geterr(3)5 April 2008 |