系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
网络攻击-arp攻击
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;
}
总结
提示:这里对文章进行总结: