パケット解析したくて WinPcap, The Packet Capture and Network Monitoring Library for Windows を使ってみる。 バージョンは 3.1
NIPCDevice と NIPCDeviceList は自分定義。
#include "stdafx.h"
#include <pcap.h>
#include <vector>
#include <string.h>
#include "NIPCstd.h"
NIPCDeviceList* createDeviceList(){
char errbuf[PCAP_ERRBUF_SIZE];
NIPCDeviceList* list = new NIPCDeviceList();
pcap_if_t *alldevsp;
// Retrieve the device list from the local machine
if(pcap_findalldevs(&alldevsp,errbuf) == -1){
printf("%s\n", errbuf);
return NULL;
}else{
pcap_if_t *d = alldevsp;
while(d){
if(d->addresses!=NULL){
NIPCDevice device;
sockaddr_in *sa =
(sockaddr_in*)d->addresses->addr;
// IP address (unsigned long)
device.address = sa->sin_addr.s_addr;
if(device.address != 0){ // (0,0,0,0) is bad
// a name for pcap_open_live()
device.name = d->name;
// a human-readable description
device.description = d->description;
list->push_back(device);
}
}
d=d->next;
}
// free an interface list returned by pcap_findalldevs().
pcap_freealldevs(alldevsp);
}
return list;
}
int main(int argc, char* argv[])
{
NIPCDeviceList* list = createDeviceList();
if(list != NULL){
for(int i=0; i<list->size(); i++){
printf("%u\n", list->at(i).address);
// std::string を printf するときは、
// std::string.c_str() で char* を取り出すこと
printf("%s\n", list->at(i).name.c_str());
printf("%s\n", list->at(i).description.c_str());
}
}
delete(list);
return 0;
}
出力サンプル
1107339456
\Device\NPF_{1234ABCD-ABCD-1234-FEDC-12349876ABCD}
Broadcom 440x 10/100 Integrated Controller
# いつまでたってもおぼえられないよ Visual C++ ...
Ref. プログラミング・開発者・ソースコード CodeZine:WinPcapを使用したパケットモニターの作成(WinPcap, パケットモニター, パケットキャプチャ)
WinPcap Developer's Packs ドキュメントの日本語訳見っけ→ WinPcap解説資料3.0
C/C++ リファレンス も参考にする。
tags: zlashdot VisualCPP VisualCpp WinPcap
Posted by NI-Lab. (@nilab)
コメント
NI-Lab.は、日本語など使ってみる
大きいことや、大きいドキュメントと、パケットモニターやサンプルとか日本語をパケットキャプチャしたはずだったの♪
投稿者: BlogPetのづらねこにゃん | 2006年04月02日 12:28