从配置Winpcap环境(dev c++)到运行HTTP数据包捕获还原

1.环境配置:

        我的环境:WindosXP虚拟机 , Dev C++

        这一步需要的内容:

        开发环境包:

        链接:https://pan.baidu.com/s/155x_BiCf-O0gNLk29_nTWw?pwd=winp 
提取码:winp

  • Winpcap4.1.3安装包
  • Winpcap4.1.2开发者包
  • Dev c++安装包
  • WS2_32.lib        

配置步骤:

        1.安装Winpcap4.1.3安装包

        2.打开Dev c++,工具——》编译选项——》编译器配置——》目录——》库,点击红框处添加Winpcap开发包中的Lib文件夹

 

        3.继续向"C包含文件"和"C++包含文件"中添加开发者包中的Include文件夹 

 

         4.新建一个空项目,点击“项目”——》"项目属性",依照下图添加wpcap.lib和WS2_32.lib

 

         5.复制如下测试代码,测试环境是否配置完成

#define WPCAP
#define HAVE_REMOTE
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <remote-ext.h>


int main()
{
	pcap_if_t* alldevs, * d;
	int i = 0;
	char errbuf[PCAP_ERRBUF_SIZE];
	if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL,&alldevs, errbuf) == -1)
	{
		fprintf(stderr, "Error in pcap_findalldevs_ex: %s\n",
			errbuf);
		exit(1);
	}
	for (d = alldevs; d != NULL; d = d->next)
	{
		printf("%d.%s", ++i, d->name);
		if (d->description)
		{
			printf("(%s)\n", d->description);
		}
		else {
			printf("(No description available)\n");
		}
	}
	if (i == 0)
	{
		printf("\nNo interfaces found! Make sure Winpcap is installed.\n");
		return 0;
	}
	// 释放设备
	pcap_freealldevs(alldevs);
}

 2.开始编写Winpcap代码

        1.首先给出Winpcap中文技术手册网站:WinPcap: WinPcap 中文技术手册 (bacysoft.cn)

         2.其中的"循序渐进教您使用WinPcap"中,有着许多翔实的代码案例,但在实际运行中可能回遇到一些环境问题,于是我对于部分代码,给出我修改后可以运行的版本:

        3.打开适配器并捕获数据包:

#define WPCAP
#define HAVE_REMOTE
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <remote-ext.h>
#include <winsock.h>
#include <time.h>

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;
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_findalldevs: %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(" (No description av
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值