📄 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 + -