ARP欺骗简介

  ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监听、篡改、重放、钓鱼等攻击方式。


ARP原理

  ARP是地址转换协议,它是一个链路层协议,工作在OSI模型的第二层,在本层和硬件接口间进行联系,同时对上层(网络层)提供服务。我们知道二层的以太网交换设备并不能识别32位的IP地址,它们是以48位以太网地址(MAC地址)传输以太网数据包的。也就是说IP数据包在局域网内部传输并不是靠IP地址而是靠MAC地址来识别目标的,因此IP地址与MAC地址之间就必须存在一种对应关系,而ARP协议就是用来确定这种对应关系的协议。

  ARP工作时,首先请求主机会发送一个含有所希望到达的IP地址的以太网广播数据包,然后目标IP的所有者会以一个含有IP和MAC地址对的数据包应答请求主机。这样请求主机就能获得要到达的IP地址对应的MAC地址,同时请求主机会将这个地址对放入自己的ARP表缓存起来,以节约不必要的ARP通信。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除。


ARP欺骗原理

  攻击者主动发送ARP报文,发送的MAC地址为攻击者主机的MAC地址,发送者的IP地址为被攻击主机的IP地址。通过不断发送这些伪造的ARP报文,让局域网上所有的主机和网关ARP表,其对应的MAC地址均为攻击者的MAC地址,这样所有的网络流量都会发送给攻击者主机。由于ARP欺骗攻击导致了主机和网关的ARP表的不正确,这种情况我们成为ARP中毒。


Scapy库

  1. get_if_hwaddr()  获取本机网络接口的函数
  2. getmacbyip()    通过IP地址获取MAC地址
  3. sendp                在第二层发送数据包

 Ether参数:

  dst  :  DestMACField  =  (None)

  src  :  SourceMACField  =  (None)

  type  :  XShortEnumField  =  (36864)

  构造一个以太网数据包通常需要指定目标和源MAC地址,如果不指定,默认发出的就是广播包。

  ARP类构造函数的参数列表:

  hwtype  :  XShortField  =  (1)      # 为1 代表以太网

  ptype  :  XShortEnumField  =  (2048)  # 0x0800为要映射的IP协议类型

  hwlen  :  ByteField  =  (6)

  plen  :  ByteField  =  (4)

  op  :  ShortEnumField  =  (1)       # 1代表ARP请求,2代表ARP响应

  hwsrc  :  ARPSourceMACField  =  (None)

  psrc  :  SourceIPField  =  (None)

  hwdst  :  MACFiled  =  ('00:00:00:00:00:00')

  pdst  :  IPField  =  ('0.0.0.0')


定向欺骗

  192.168.1.23和192.168.1.18进行通信,我们想告诉192.168.1.23这台主机网关地址为192.168.1.102所在的主机,构造数据包:

  pkt = Ether(src=[1.102的MAC],dst=[1.18的MAC]) /

      ARP(hwsrc=1.102的MAC,psrc=1.18地址,hwdst=1.18MAC, pdst=1.18 IP地址,op=2)

  上面的代码我们不论是以太网数据包还是ARP数据包,我们都明确指定了来源和目标,在ARP数据包中,我们将1.102的MAC地址和网关的IP地址进行了绑定,op取值为2,作为一个响应包被1.18接到,这样1.18会更新自己的ARP缓存表,造成中毒,从而1.18发往网关的数据包都会被发往1.102.

  如果要欺骗网关,把网关发往1.18的数据包都发送到1.102上,根据上面的代码稍作修改即可:

  pkt = Ether(src=[1.102的MAC],dst=[网关的Mac]) /

      ARP(hwsrc=1.102的MAC,psrc=1.18地址,hwdst=网关MAC,pdst=网关IP地址,op=2)

  上面构造的两个数据包都是ARP响应包,其实发送请求包也可以进行毒化,请求毒化的原理是,我们请求时候使用假的源IP和MAC地址,目标主机同样会更新自己的路由表。

  ARP请求的方式欺骗主机,构造ARP包如下:

  pkt = Ether(src=[1.102的MAC],dst=[1.18的Mac]) /

       ARP(1.102的MAC,网关IP地址,hwdst=1.18 MAC, pdst=1.18 IP地址,op=1)

  ARP请求的方式欺骗网关,构造ARP包如下:

  pkt = Ether(src=[1.102的MAC], dst=[网关的MAC])/

      ARP(1.102的MAC,1.18的地址,hwdst=网关MAC,pdst=网关IP地址,op=1)


广播欺骗

  广播欺骗,首先以太网数据包直接构造一个广播包,ARP包不用填写目标主机的信息即可。

  ARP广播响应包的构造方式:

  pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff')/ARP(hwsrc=mac, psrc=args[0],op=2)

  

  广播欺骗公式:

  pkt = Ether(src=攻击者MAC,dst=被欺骗主机(或网关)MAC) /

    ARP(hwsrc=毒化记录中的MAC,psrc=毒化记录中的IP,hwdst=被欺骗主机MAC,pdst=被欺骗主机IP地址, op =1 (或2))


参考链接

http://www.cnblogs.com/xuanhun/p/5802573.html

APR欺骗的更多相关文章

  1. ARP协议,以及ARP欺骗

    1.定义: 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到网络上 ...

  2. 网络嗅探与欺骗(第一二部分)非平台——P201421410029

    中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告   实验二 网络嗅探与欺骗     学生姓名 李政浩 年级 2014 区 ...

  3. 中间人攻击-Arp之局域网内DNS欺骗

    基础知识 网关是啥? 网关是工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,网关就好比一个房间通向另一个房间的一扇门. ARP协议 假设A(192.168.1.2)与B(1 ...

  4. https连接的前几毫秒发生了什么

    在讨论这个话题之前,先提几个问题: 为什么说https是安全的,安全在哪里? https是使用了证书保证它的安全的么? 为什么证书需要购买? 我们先来看https要解决什么问题 (手机读者推荐移步ht ...

  5. Ettercap 实施中间人攻击

    中间人攻击(MITM)该攻击很早就成为了黑客常用的一种古老的攻击手段,并且一直到如今还具有极大的扩展空间,MITM攻击的使用是很广泛的,曾经猖獗一时的SMB会话劫持.DNS欺骗等技术都是典型的MITM ...

  6. 网络协议-HTTPS

    转载:http://www.renfed.com/2017/02/03/https/ 一.解决问题 HTTPS解决的是中间人攻击 公网:域名解析--IP:所以中间站点抢答返回错误IP 局域网:路由器找 ...

  7. python中的scapy模块

    scapy模块是干嘛用的? 答:Scapy的是一个强大的交互式数据包处理程序(使用python编写).它能够伪造或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等等.它可以很容易地处理一 ...

  8. 网络安全基础之arp

    ARP(Address Resolution Protocol),中文解释为地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议. ARP大致工作流程如下: 主机发送信息时将包含目标IP地址 ...

  9. 中间人攻击之arp欺骗 科普ARP欺骗

    中间人攻击之arp欺骗 科普ARP欺骗 A <-> B A中有个ARP Table,每次发包都会在此Table中查找,若找不到,发APR Request包询问.此时若hacker冒充B的M ...

随机推荐

  1. 关于MySQL中添加数据的两种方法

    下面介绍两种执行SQL命令的方法,并作出相应地总结,第一种介绍一种常规用法,下面进行做简要地分析,首先我们需要执行打开数据库操作首先创建一个MySqlConnection对象,在其构造函数中传入一个连 ...

  2. linux服务器上安装python 3.6.3

    一.下载源码包 地址https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz 二.解压源码包 1.下载解压工具xz #yum -y ins ...

  3. React learn path

    React learn path The Road to learn React https://github.com/the-road-to-learn-react https://roadtore ...

  4. 初学者学习C++的50条忠告

    1.把C++当成一门新的语言学习(和C没啥关系!真的.); 2.看<Thinking In C++>,不要看<C++变成死相>; 3.看<The C++ Programm ...

  5. Pairs Forming LCM LightOJ - 1236 (算术基本定理)

    题意: 就是求1-n中有多少对i 和 j 的最小公倍数为n  (i <= j) 解析: 而这题,我们假设( a , b ) = n ,那么: n=pk11pk22⋯pkss, a=pd11pd2 ...

  6. poj1038 Bugs Integrated,Inc. (状压dp)

    题意:N*M的矩阵,矩阵中有一些坏格子,要在好格子里铺2*3或3*2的地砖,问最多能铺多少个. 我的方法好像和网上流传的方法不太一样...不管了.... 由数据范围很容易想到状压dp 我们设某个状态的 ...

  7. A1035. Password

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  8. 【BZOJ2648】SJY摆棋子

    题目大意:维护一个二维平面,平面上初始有 N 个点,支持两种操作:平面加点.查询距离某个指定点的最小哈密顿距离. 题解:学习到了 kd-tree 数据结构. kd-tree 类似于平衡树,即:每个节点 ...

  9. ZOJ_3950_How Many Nines 解题报告及如何对程序进行测试修改

    The 17th Zhejiang University Programming Contest Sponsored by TuSimple Solution: #include <stdio. ...

  10. tp3 save操作小bug误区

    $china_area->save(['is_del' => 1,'updatetime' => time()]); SHOW COLUMNS FROM `tf_china_area ...