私はpcapファイルをベクトルや配列のようないくつかのデータ構造に読み込み、あとで集めたデータ(パケット長、タイムスタンプのように選択したものだけ)をアプリケーションで使用しようとしています。私はPCAPを読み取るためのいくつかのサンプルアプリケーションを見つけた:pcapファイルをベクトル/配列に読み込む
#include <stdio.h>
#include <pcap.h>
#define LINE_LEN 16
void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *);
int main(int argc, char **argv)
{
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE];
if(argc != 2)
{
printf("usage: %s filename", argv[0]);
return -1;
}
/* Open the capture file */
if ((fp = pcap_open_offline(argv[1], // name of the device
errbuf // error buffer
)) == NULL)
{
fprintf(stderr,"\nUnable to open the file %s.\n", argv[1]);
return -1;
}
/* read and dispatch packets until EOF is reached */
pcap_loop(fp, 0, dispatcher_handler, NULL);
pcap_close(fp);
return 0;
}
void dispatcher_handler(u_char *temp1,
const struct pcap_pkthdr *header,
const u_char *pkt_data)
{
u_int i=0;
/*
* unused variable
*/
(VOID*)temp1;
/* print pkt timestamp and pkt len */
printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
printf("\n\n");
}
問題がpcap_loop()
です。私はこのためにdocumentationを見つけましたが、唯一の情報はファイルの終わりに達するまでこれが全ファイルを読み込んでいるということです。私はFILE
としてファイルを扱おうとしていましたが、whileループではEOF
まで読んでいますが、それはうまくいきません。fp
をFILE
として扱うことはできません。
また、後で取り出すためにpcap_handler
へのポインタを渡す可能性はありません。
誰かが私が他の方法でそれをやり遂げる方法を提案できますか?