パケット解析したくて 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++ リファレンス も参考にする。


コメント

NI-Lab.は、日本語など使ってみる
大きいことや、大きいドキュメントと、パケットモニターやサンプルとか日本語をパケットキャプチャしたはずだったの♪


tags: zlashdot VisualCPP VisualCpp WinPcap

Posted by NI-Lab. (@nilab)