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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: (C++)winpcapを使ったプログラムについて

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

#2

by Math » 7年前

http://www.win10pcap.org/ja/を使ってはどうですか。

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

#1

by 塵界 » 7年前

初めて質問させていただきます。

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

環境 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もいまいち理解できているのかわからないので困ってます。

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

よろしくお願いします。

ページトップ