制作自己专属的抓包工具

Wireshark是一个强大的抓包分析工具,制作自己的抓包工具可以基于Wireshark的插件机制做二次开发,也可以基于WinPcap的开发包来开发,WinPcap本质上是基于NDIS驱动程序接口规范开发的(NDIS是Network Driver Interface Specification的简写)。

这里记录的是基于C/C++和WpdPack二次开发包的方法。供大家参考。

由于驱动需要签名才能使用, 签名费用昂贵,个人开发者可以使用开源的签名驱动,比如基于NDIS的驱动有OpenVPN开源的可以使用,也有Wireguard开源的WinTun驱动可以使用。

下面我会贴出具体的实现源码

Linux下的开发包下载地址

Home | TCPDUMP & LIBPCAPicon-default.png?t=M276https://www.tcpdump.org/https://www.tcpdump.org/release/libpcap-1.10.1.tar.gzicon-default.png?t=M276https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz

windows下的开发包下载地址:

https://www.winpcap.org/install/bin/WpdPack_4_1_2.ziphttps://www.winpcap.org/install/bin/WpdPack_4_1_2.zip WinPcap · Developer Resourceshttps://www.winpcap.org/devel.htm


#include "pcap.h"

#include <string.h>
#include <Windows.h>
#include <winsock.h>
#include <process.h>



#pragma comment(lib, "wpcap.lib")
#pragma comment(lib, "Ws2_32.lib")

#define LINE_LEN 16
#define MAX_ADDR_LEN 32

char macaddr[128] = { 0 };
int  total_send = 0;
int  total_recv = 0;
#define  RECV_DIR  1
#define  SEND_DIR  2

int  flowSecondRecv[2] = { 0 };
int  flowSecondSend[2] = { 0 };

int  flowMinuteRecv[61] = { 0 };
int  flowMinuteSend[61] = { 0 };

int  flowHourRecv[25] = { 0 };
int  flowHourSend[25] = { 0 };

int  flowDayRecv[32] = { 0 };
int  flowDaySend[32] = { 0 };

//存放上60分钟的数据
int  _flowMinuteRecv[61] = { 0 };
int  _flowMinuteSend[61] = { 0 };
//存放上24小时的数据
int  _flowHourRecv[25] = { 0 };
int  _flowHourSend[25] = { 0 };
//存放上30天的数据
int  _flowDayRecv[32] = { 0 };
int  _flowDaySend[32] = { 0 };


void dumpData()
{
	
}

void updateData(int dir, int len )
{
	time_t local_tv_sec = time(0);
	struct tm* ltime = localtime(&local_tv_sec);
	
	if (dir == RECV_DIR) {
		if (flowSecondRecv[0] == local_tv_sec) {
			flowSecondRecv[1] += len;//单位字节
		}
		else {
			flowSecondRecv[0] = local_tv_sec;
			flowSecondRecv[1] = len;//单位字节
		}

		if (flowMinuteRecv[0] == ltime->tm_hour) {
			flowMinuteRecv[ltime->tm_min + 1] += len;//单位字节
		}
		else {
			memcpy(_flowMinuteRecv, flowMinuteRecv, sizeof(flowMinuteRecv));
			memset(flowMinuteRecv, 0, sizeof(flowMinuteRecv));

			flowMinuteRecv[0] = ltime->tm_hour;
			flowMinuteRecv[ltime->tm_min + 1] = len;//单位字节
		}

		if (flowHourRecv[0] == ltime->tm_mday)
		{
			flowHourRecv[ltime->tm_hour] += len;//单位字节
		}
		else {
			memcpy(_flowHourRecv, flowHourRecv, sizeof(flowHourRecv));
			memset(flowHourRecv, 0, sizeof(flowHourRecv));

			flowHourRecv[0] = ltime->tm_mday;
			flowHourRecv[ltime->tm_hour +1] = len;//单位字节
		}

		if (flowDayRecv[0] == ltime->tm_mon) {
			flowDayRecv[ltime->tm_mday] += len;
		}
		else {
			memcpy(_flowDayRecv, flowDayRecv, sizeof(flowDayRecv));
			memset(flowDayRecv, 0, sizeof(flowDayRecv));

			flowDayRecv[0] = ltime->tm_mon;
			flowDayRecv[ltime->tm_mday] = len;
		}

	}


	if 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

langeldep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值