offlinefile.cpp
上传用户:zjwen163
上传日期:2022-01-14
资源大小:1k
文件大小:3k
源码类别:

网络截获/分析

开发平台:

Visual C++

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <pcap.h>
  4. //error At the moment the kernel dump feature is not supported in the driver
  5. main(int argc, char **argv) {
  6.     
  7.     pcap_if_t *alldevs, *d;
  8.     pcap_t *fp;
  9.     u_int inum, i=0;
  10.     char errbuf[PCAP_ERRBUF_SIZE];
  11.     printf("kdump: saves the network traffic to file using WinPcap kernel-level dump faeature.n");
  12.     printf("t Usage: %s [adapter] | dump_file_name max_size max_packsn", argv[0]);
  13.     printf("t Where: max_size is the maximum size that the dump file will reach (0 means no limit)n");
  14.     printf("t Where: max_packs is the maximum number of packets that will be saved (0 means no limit)nn");
  15.     if(argc < 5){
  16.         /* 用户没有提供数据源。获取设备列表 */
  17.         if (pcap_findalldevs(&alldevs, errbuf) == -1)
  18.         {
  19.             fprintf(stderr,"Error in pcap_findalldevs: %sn", errbuf);
  20.             exit(1);
  21.         }
  22.         
  23.         /* 打印列表 */
  24.         for(d=alldevs; d; d=d->next)
  25.         {
  26.             printf("%d. %s", ++i, d->name);
  27.             if (d->description)
  28.                 printf(" (%s)n", d->description);
  29.             else
  30.                 printf(" (No description available)n");
  31.         }
  32.         
  33.         if(i==0)
  34.         {
  35.             printf("nNo interfaces found! Make sure WinPcap is installed.n");
  36.             return -1;
  37.         }
  38.         
  39.         printf("Enter the interface number (1-%d):",i);
  40.         scanf("%d", &inum);
  41.         
  42.         if(inum < 1 || inum > i)
  43.         {
  44.             printf("nInterface number out of range.n");
  45.             /* 释放列表 */
  46.             return -1;
  47.         }
  48.         
  49.         /* 跳转到所选的设备 */
  50.         for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
  51.         
  52.         /* 打开设备 */
  53.         if ( (fp = pcap_open_live(d->name, 100, 1, 20, errbuf) ) == NULL)
  54.         {
  55.             fprintf(stderr,"nError opening adaptern");
  56.             return -1;
  57.         }
  58.         /* 释放设备列表 */
  59.         pcap_freealldevs(alldevs);
  60.         /* 开始堆过程 */
  61.         if(pcap_live_dump(fp, argv[1], atoi(argv[2]), atoi(argv[3]))==-1){
  62.             printf("Unable to start the dump, %sn", pcap_geterr(fp));
  63.             return -1;
  64.         }
  65.     }
  66.     else{
  67.         
  68.         /* 打开设备 */
  69.         if ( (fp= pcap_open_live(argv[1], 100, 1, 20, errbuf) ) == NULL)
  70.         {
  71.             fprintf(stderr,"nError opening adaptern");
  72.             return -1;
  73.         }
  74.         /* 开始堆过程 */
  75.         if(pcap_live_dump(fp, argv[0], atoi(argv[1]), atoi(argv[2]))==-1){
  76.             printf("Unable to start the dump, %sn", pcap_geterr(fp));
  77.             return -1;
  78.         }
  79.     }
  80.     /* 等待,知道堆过程完成,也就是当数据到达max_size或max_packs的时候 */
  81.     pcap_live_dump_ended(fp, TRUE);
  82.     
  83.     /* 关闭适配器,这样,就可以将数据立刻输出到文件了 */
  84.     pcap_close(fp);
  85.     return 0;
  86. }