windows下c++抓包实例

来源:互联网 发布:新闻联播图片素材软件 编辑:程序博客网 时间:2024/06/01 08:06

                                         windows下c++抓包实例

1,第一步是安装WinPcap软件

http://pan.baidu.com/s/1slGiedv这是我放在网盘里的

2,第二步就是下载WpdPack开发包

http://pan.baidu.com/s/1jIFGw3W这是我放在网盘里的

里面有vs2013的安装方法,其实就是把两个文件include和lib文件夹下的内容拷贝到vs下面的相应文件下面

3,就是建立工程项目粘贴一下代码

自己再改改吧

// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#define HAVE_REMOTE 
#include <pcap.h>
///////////////////////////////
#ifndef WIN32
#include <sys/socket.h>
#include <netinet/in.h>
#else
#include <winsock.h>
#endif
////////////////////////////
#define _CRT_SECURE_NO_WARNINGS
#pragma comment (lib,"wpcap.lib")
#pragma comment(lib,"ws2_32.lib")
using namespace std;

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
int main()
{
 pcap_if_t *alldevs;
 pcap_if_t *d;
 int inum=0;
 int i = 0;
 pcap_t *adhandle;
 char errbuf[PCAP_ERRBUF_SIZE];
 /* 获取本机设备列表 */
 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
 {
  fprintf(stderr, "Error in pcap: %s\n", errbuf);
  exit(1);
 }
 /* 打印設備列表 */
 for (d = alldevs; d; d = d->next)
 {
  printf("%d. %s", ++i, d->name);
  if (d->description)
   printf(" (%s)\n", d->description);
  else
   printf(" (没有可用的接口)\n");
   }
 if (i == 0)
 {
  printf("\n没有找到接口!确保安装winpcap.\n");
  return -1;
 }
 printf("输入接口号  (1-%d):", i);

 
    cin >> inum;
 if (inum < 1 || inum > i)
 {
  printf("\n接口号超出范围 .\n");
  /* 释放设备列表 */
  pcap_freealldevs(alldevs);
  return -1;
 }
 /* 跳转到选中的适配器 */
 for (d = alldevs, i = 0; i< inum - 1; d = d->next, i++);
 /* 打开设备 */
 if ((adhandle = pcap_open(d->name,          // 设备名
  65536,            // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容
  PCAP_OPENFLAG_PROMISCUOUS,    // 混杂模式
  1000,             // 读取超时时间
  NULL,             // 远程机器验证
  errbuf            // 错误缓冲池
  )) == NULL)
 {
  fprintf(stderr, "\n无法打开适配器 . %s 不支持通过WinPcap \n", d->name);
    /* 释放设备列表 */
    pcap_freealldevs(alldevs);
  return -1;
 }
 printf("\n监听中 %s...\n", d->description);
 /* 释放设备列表 */
 pcap_freealldevs(alldevs);
 /* 开始捕获 */
 pcap_loop(adhandle, 0, packet_handler, NULL);
 getchar();
 return 1;
}
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
 struct tm *ltime=NULL;
 char timestr[16];
 time_t local_tv_sec;
 /* 将时间戳转换成可识别的格式 */
 local_tv_sec = header->ts.tv_sec;
 localtime_s(ltime, &local_tv_sec);//
 strftime(timestr, sizeof timestr, "%H:%M:%S", ltime);
 printf("%s,%.6d 长度:%d\n", timestr, header->ts.tv_usec, header->len);
}




0 0
原创粉丝点击