PCAP_FINDALLDEVS(3) | FreeBSD Library Functions Manual | PCAP_FINDALLDEVS(3) |
名称
pcap_findalldevs, pcap_freealldevs -キャプチャ (捕獲) デバイスのリストを取得し、そのリストを解放する書式
#include <pcap/pcap.h>
char errbuf[PCAP_ERRBUF_SIZE];
int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf);
void pcap_freealldevs(pcap_if_t *alldevs);
解説
pcap_findalldevs() は、 pcap_create() と pcap_activate() で、または pcap_open_live() でオープンすることができるネットワークデバイスのリストを構築します。 (例えば、そのプロセスにはキャプチャするためにそれらをオープンする十分な特権がないかもしれないので、 pcap_findalldevs() を呼び出すプロセスによってオープンすることができないネットワークデバイスがあるかもしれないことに注意してください。そうだとしたら、それらのデバイスは、リストに現れません。) pcap_findalldevs() が成功するなら、 alldevsp によって指されるポインタは、リストの最初の要素を指すように設定されるか、またはデバイスが見つからなかったなら (これは、成功と見なされます)、 NULL を指すように設定されます。リストの各要素は、タイプ pcap_if_t であり、次のメンバがあります:- next
- NULL でないなら、リスト中の次の要素へのポインタ。リストの最後の要素のための NULL。
- name
- pcap_open_live() に渡されるデバイスの名前を与える文字列へのポインタ。
- description
- NULL でなければ、デバイスの人間に読み込み可能な記述を与える文字列へのポインタ。
- addresses
- デバイスのためのネットワークアドレスのリストの最初の要素へのポインタ、またはデバイスにアドレスがないなら、 NULL です。
- flags
-
デバイスフラグは、次の通りです:
- PCAP_IF_LOOPBACK
- デバイスがループバックインタフェースであるなら、設定します。
アドレスのリストの各要素は、タイプ pcap_addr_t であり、次のメンバがあります:
- next
- NULL でなければ、リストの次の要素へのポインタ。リストの最後の要素のための NULL。
- addr
- アドレスを含む struct sockaddr へのポインタ。
- netmask
- NULL でなければ、 addr によって指されたアドレスに対応するネットマスクを含む struct sockaddr へのポインタ。
- broadaddr
- NULL でなければ、 addr によって指されたアドレスに対応するブロードキャスト (同報通信) アドレスを含む struct sockaddr へのポインタ。デバイスがブロードキャストをサポートしないなら、NULL となるかもしれません。
- dstaddr
- NULL でなければ、 addr によって指されたアドレスに対応する宛先アドレスを含む struct sockaddr へのポインタ。デバイスがポイントツーポイント (point-to-point) インタフェースでないなら、NULL となるかもしれません。
アドレスのリスト中のアドレスは、IPv4 アドレス、IPv6 アドレス、またはある他のタイプのアドレスかもしれないので、アドレスの内容を解釈する前に struct sockaddr の sa_family メンバをチェックしなければならないことに注意してください。アドレスがすべて IPv4 アドレスまたは IPv4 あるいは IPv6 アドレスをすべて等しいと仮定しないでください。 IPv4 アドレスには、値 AF_INET があり、(IPv6 をサポートしない、より古いオペレーティングシステムは、それを定義しないかもしれない) IPv6 アドレスには、値 AF_INET6 があり、そして他のアドレスには、他の値があります。他のアドレスが返されるかどうか、それらがプラットフォーム依存であるかもしれないどのタイプ。 IPv4 アドレスについて、あたかも struct sockaddr_in を指すかのように、 struct sockaddr ポインタを解釈することができます。 IPv6 アドレスについて、あたかも struct sockaddr_in6 を指すかのように、それを解釈することができます。
デバイスのリストは、 alldevs によって指されるリストを解放する、 pcap_freealldevs() によって解放されなければなりません。
戻り値
pcap_findalldevs() は、成功すれば 0 を返し、失敗すれば-1 を返します。示されるように、デバイスを見つけないことは、失敗ではなく、成功と見なされるので、0 が、その場合に返されます。-1 が返されるなら、 errbuf は、適切なエラーメッセージで満たされます。 errbuf は、少なくとも PCAP_ERRBUF_SIZE 文字を保持できると想定されます。関連項目
pcap(3), pcap_create(3), pcap_activate(3), pcap_open_live(3)22 August 2010 |