⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arp.h

📁 arp 分析器
💻 H
字号:
//////////////////////////////////////////////////////////////////////////
// arp.h 定义以太网arp帧结构,封装了winpcap开发包的重要函数

#include "Packet32.h"
#include <ntddndis.h>
#include <stdio.h>
#include <conio.h>

#include "afx.h"

#pragma comment(lib,"ws2_32")
#pragma comment(lib,"packet")

#pragma once
#pragma pack(push,1)

// Ether(DLC) header
typedef struct ethdr
{
    unsigned char   eh_dst[6];	// 以太网目的MAC地址
    unsigned char   eh_src[6];	// 以太网源MAC地址
    unsigned short  eh_type;	// 帧类型
}ETHDR,*PETHDR;

// ARP分组格式
typedef struct arphdr
{
    unsigned short  arp_hdr;	// 硬件类型
    unsigned short  arp_pro;	// 协议类型
    unsigned char   arp_hln;	// 硬件地址长度
    unsigned char   arp_pln;	// 协议地址长度
    unsigned short  arp_opt;	// ARP/RARP
    unsigned char   arp_sha[6];	// 发送者地址
    unsigned long   arp_spa;	// 发送者IP地址
    unsigned char   arp_tha[6];	// 接受者地址
    unsigned long   arp_tpa;	// 接受者IP地址
}ARPHDR,*PARPHDR;

/*
// IP分组格式
typedef struct iphdr
{
    unsigned char  h_lenver;		// 头的长度
    unsigned char  tos;				// 服务类型
    unsigned short total_len;		// 包的总长
    unsigned short ident;			// 唯一标识符
    unsigned short frag_and_flags;	// 状态
    unsigned char  ttl;				// 生存时间
    unsigned char  proto;			// 协议(TCP,UDP,etc)
    unsigned short checksum;		// IP校验码
    unsigned int   sourceip;
    unsigned int   destip;
}IPHDR,*PIPHDR;
*/

#pragma pack(push)

#define ETH_IP				0x0800
#define ETH_ARP				0x0806
#define ARP_REQUEST			0x0001
#define ARP_REPLY			0x0002
#define ARP_HARDWARE		0x0001
#define max_num_adapter		10

class CWinPcap
{
public:
	/* 分析arp包内容*/
	void	GetData(LPPACKET lp);
	/* 发送arp请求包*/
	int		Sender(ULONG ipCur, ULONG ipMine, BYTE mac[]);
	/* 监听网卡收到的包*/
	int		Sniff();
	/* 获得网卡信息,IP地址和MAC地址*/
	void	GetNetInfo(sockaddr_in &sin, CString &strMAC, BYTE mac[]);

	CWinPcap()
	{
		memset (&m_netinfo, 0, sizeof(m_netinfo));
		OpenPcap();
	};
	~CWinPcap()
	{
		ClosePcap();
	};
	/* 打开网卡并初始化*/
	int		OpenPcap();
	/* 关闭网卡*/
	void	ClosePcap();
	
private:
	char		adapterlist[max_num_adapter][1024];	
	/* 网卡*/
	LPADAPTER	m_lpAdapter;
	/* 帧缓冲*/
	LPPACKET	m_lpPacketReceiver,
				m_lpPacketSender;

	int			m_iAdapterNum;
	int			m_iSelAdapter;
	npf_if_addr	m_netinfo;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -