ARP 攻击 原理
提示:这里可以添加本文要记录的大概内容:
ARP 攻击是一种在局域网内有效的攻击方式,它是借助于arp包广播的特性的一种攻击方式。由于arp 包在居于网内是通过广播的方式进行寻址的数据包。在局域网内任意主机收到广播包就回复错误的arp 应答报文,造成寻址主机无法收到正确的应答报文造成主机无法上网。
提示:以下是本篇文章正文内容,下面案例可供参考
一、结构体设计?
准备采用netmap 实现简单的协议栈。设计的协议有mac,IP, arp 等协议。详细的结构体设计如下。
MAC
struct ethhdr { unsigned char h_dst[ETH_ADDR_LENGTH]; unsigned char h_srt[ETH_ADDR_LENGTH]; unsigned short type; }
IP header
// IP 头设计 typedef struct iphdr { unsigned char iph_len:4, version:4; //0x45 unsigned char tos; unsigned short totlen; unsigned short id; unsigned short flag_offset; unsigned char ttl; unsigned char type; unsigned short check; unsigned int sip; unsigned int dip; }
ARP 头
struct arphdr { unsigned short h_type; unsigned short h_prot; unsigned char h_addr_len; unsigned char h_protolen; // 协议区别IPV4 IPV6 unsigned short opt; // 0.1 request replay unsigned char smac[ETH_ADDR_LEN]; unsigned int sip; unsigned char dmac[ETH_ADDR_LEN]; unsigned int dip; }; struct arppkt { struct ethhdr eh; struct arphdr arp; };
二、测试代码
1.arp reply 接口
代码如下(示例):
void echo_arp_pkt(struct arppkt *arp, struct arppkt *arp_rt, char *mac) { memcpy(arp_rt, arp, sizeof(struct arppkt)); memcpy(arp_rt->eh.h_dst, arp->eh.h_src, ETH_ADDR_LENGTH); str2mac(arp_rt->eh.h_src, mac); arp_rt->eh.h_proto = arp->eh.h_proto; arp_rt->arp.h_addrlen = 6; arp_rt->arp.h_protolen = 4; arp_rt->arp.oper = htons(2); str2mac(arp_rt->arp.smac, mac); arp_rt->arp.sip = arp->arp.dip; memcpy(arp_rt->arp.dmac, arp->arp.smac, ETH_ADDR_LENGTH); arp_rt->arp.dip = arp->arp.sip; }
总结
提示:这里对文章进行总结: