(C++)winpcapを使ったプログラムについて
Posted: 2017年9月27日(水) 23:04
初めて質問させていただきます。
自分は今パケットをキャプチャーして動作するソフトを作りたく、テストとしてこのようなプログラムを組みました。
環境 win10 visualstudio2017
winpcapは4.1.2を使用しています。
こちらからダウンロードしました https://www.winpcap.org/
これをデバックしたところ36行目のところで止まってしまい困っています。
エラーメッセージにアクセス違反と出てるのでAddressList[*max] 辺りがおかしいのではないかとは思ってますが具体的にどこが悪いのかわかりません。
sockaddr_inもいまいち理解できているのかわからないので困ってます。
なのでどこがおかしいのか、何を学ぶべきかを教えていただきたいです。
よろしくお願いします。
自分は今パケットをキャプチャーして動作するソフトを作りたく、テストとしてこのようなプログラムを組みました。
環境 win10 visualstudio2017
winpcapは4.1.2を使用しています。
こちらからダウンロードしました https://www.winpcap.org/
#define HAVE_REMOTE
#include <winsock2.h>
#include <pcap.h>
struct pcap {};
#define MAX_ADAPTER 10
#define MAX_RECV_SIZE 65535
pcap_t *fp = NULL;
char ErrorBuf[PCAP_ERRBUF_SIZE];
unsigned long AddressList[MAX_ADAPTER];
char NameList[MAX_ADAPTER][1024];
bool main(unsigned long AddressList[MAX_ADAPTER], char NameList[MAX_ADAPTER][1024], int *max)
{
// デバイス一覧の取得
pcap_if_t *AddDevs;
if (pcap_findalldevs(&AddDevs, ErrorBuf) == -1) {
printf("error");
return false;
}
else {
pcap_if_t *d = AddDevs;
while (d) {
// 取得したデバイス情報からIPアドレスを取得する
if (d->addresses != NULL) { // IPアドレスの情報が有効なものだけをターゲットにする
sockaddr_in *sa = (sockaddr_in*)d->addresses->addr;
// IPアドレスをコピーする
AddressList[*max] = sa->sin_addr.s_addr;
if (AddressList[*max] != 0) { // IPアドレスが0.0.0.0で無い場合は、有効なアダプタ
strcpy_s(NameList[*max], d->name); // アダプタ名をコピーする
(*max)++;
}
}
d = d->next;
}
// デバイス情報のバッファを開放する
pcap_freealldevs(AddDevs);
}
return true;
}
エラーメッセージにアクセス違反と出てるのでAddressList[*max] 辺りがおかしいのではないかとは思ってますが具体的にどこが悪いのかわかりません。
sockaddr_inもいまいち理解できているのかわからないので困ってます。
なのでどこがおかしいのか、何を学ぶべきかを教えていただきたいです。
よろしくお願いします。