ページ 11

(C++)winpcapを使ったプログラムについて

Posted: 2017年9月27日(水) 23:04
by 塵界
初めて質問させていただきます。

自分は今パケットをキャプチャーして動作するソフトを作りたく、テストとしてこのようなプログラムを組みました。

環境 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;
}
これをデバックしたところ36行目のところで止まってしまい困っています。
エラーメッセージにアクセス違反と出てるのでAddressList[*max] 辺りがおかしいのではないかとは思ってますが具体的にどこが悪いのかわかりません。
sockaddr_inもいまいち理解できているのかわからないので困ってます。

なのでどこがおかしいのか、何を学ぶべきかを教えていただきたいです。

よろしくお願いします。

Re: (C++)winpcapを使ったプログラムについて

Posted: 2017年9月29日(金) 00:02
by Math
http://www.win10pcap.org/ja/を使ってはどうですか。