ARP 欺骗是一种以 ARP 地址解析协议为基础的一种网络攻击方式, 那么什么是 ARP 地址解析协议: 首先我们要知道, 一台电脑主机要把以太网数据帧发送到同一局域网的另外一台主机, 它的底层是通过 48bit 的 Mac 地址来确定目的接口的, 但是我们在应用层是使用 IP 地址来访问目标主机的, 所以 ARP 的作用就是当一台主机访问一个目标 IP 地址的时候, 它为该主机返回目标 IP 主机的 Mac 地址, 并且这个过程是自动完成的, 应用层的程序是不用关心这件事的.

在讲 ARP 欺骗之前我们先来了解一下正常情况下一台主机是如何通过路由器上网的:

如上图, 我们以 A 主机 ping 8.8.8.8 为例:

  1. 主机 A 上执行 ping 8.8.8.8
  2. 主机 A 准备根据默认路由将数据包发送给 192.168.0.1, 但是最开始的时候主机 A 不知道 192.168.0.1 的 Mac 地址, 所以主机 A 广播一条 ARP Request, 询问 192.168.0.1 的 Mac 地址是什么
  3. 路由器收到该 ARP 请求, 发现自己是 192.168.0.1 于是向主机 A 回复一条 ARP Reply, 告诉主机 A 192.168.0.1 的 Mac 地址是 xxxGW.
  4. 主机 A 收到该 ARP Reply, 并使用该 Reply 中的 MAC 地址封一个 ICMP Request 包, 然后将包发出去
  5. 路由器收到该 ICMP 包, 发现目标 IP 是公网 IP, 便将该包放送到公网, 公网返回 ICMP Reply 给路由器
  6. 路由器准备将 ICMP Reply 发送给 192.168.0.100, 但是同第2步, 路由器最开始的时候也不知道 192.168.0.100 的 Mac 地址是多少, 所以路由器会广播一条 ARP Request, 询问 192.168.0.100 的 Mac 地址是什么
  7. 主机 A 收到 ARP Request, 发现自己是 192.168.0.100, 于是向路由器回复 ARP Reply, 告诉路由器 192.168.0.100的 Mac 地址是 xxxA.
  8. 路由器收到 ARP Reply, 并使用该 Reply 中的 MAC 地址将第5步收到 ICMP Reply 包重新封包, 并发送出去
  9. 主机 A 收到 ICMP Reply

至此, 正常的上网流程结束. 然后对照上面的流程回答下面两个问题:

  1. 如果主机 B 无脑的向主机 A 发送 ARP Reply, 告诉 A 192.168.0.1 的 MAC 是 xxxB, 会发生什么?
  2. 如果主机 B 无脑的向路由器 GW 发送 ARP Reply, 告诉 GW 192.168.0.100 的 MAC 是 xxxB, 会发生什么?

答案如下图:

如果主机 B 做了上面说的两件事的话, 那么主机 A 访问网络的所有数据都会先经过主机 B, 并且回来的数据也都会经过 B, 至此, 整个 ARP 欺骗完成.

至于实际操作, 在自己的机器上安装一个 arpspoof 工具便可以, Ubuntu 下可以直接使用如下命令安装:

apt install dsniff

安装好之后先打开 IP 转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

然后使用 arpspoof 命令进行欺骗, 命令使用方法如下:

arpspoof -i <网卡名> -t <欺骗的目标> <我是谁>

比如上面我举得例子, 分别开两个终端:

终端1, 欺骗主机 A 我是网关

arpspoof -i eth0 -t 192.168.0.100 192.168.0.1

终端2, 欺骗网关我是主机 A

arpspoof -i eth0 -t 192.168.0.1 192.168.0.100

欺骗成功之后可以通过抓包工具查看主机 A 所有的流量, 这里不再多说.

局域网 ARP 欺骗原理详解的更多相关文章

  1. 【转】VLAN原理详解

    1.为什么需要VLAN 1.1 什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络.V ...

  2. LVS原理详解(3种工作方式8种调度算法)--老男孩

    一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...

  3. LVS原理详解(3种工作模式及8种调度算法)

    2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法)   LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期: ...

  4. 交换机工作原理、MAC地址表、路由器工作原理详解

    一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的.在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据 ...

  5. VLAN原理详解[转载] 网桥--交换机---路由器

    来自:http://blog.csdn.net/phunxm/article/details/9498829 一.什么是桥接          桥接工作在OSI网络参考模型的第二层数据链路层,是一种以 ...

  6. NFS原理详解

    NFS原理详解 摘自:http://atong.blog.51cto.com/2393905/1343950 2013-12-23 12:17:31 标签:linux NFS nfs原理详解 nfs搭 ...

  7. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  8. Zigbee组网原理详解

    Zigbee组网原理详解 来源:互联网 作者:佚名2015年08月13日 15:57   [导读] 组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点加入网络.其中节点加入网络又包括两个 ...

  9. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

随机推荐

  1. mybatis 基础(二) xml文件中的其他知识点

    mybatis xml文件中一些标签的使用 此标签主要用作 配置 "别名" 如果实体类与数据库中字段名在不区分大小写的情况下相同的话, 那就不需要配置resultMap,因为mys ...

  2. [NAIPC2016]Jewel Thief(决策单调性+分治)

    [NAIPC2016]Jewel Thief(决策单调性+分治) 题面 原题提交地址(题目编号H) 原题面下载地址 有\(n\)个物品,每个物品有一个体积\(w_i\)和价值\(v_i\),现在要求对 ...

  3. java中this总结(转载请注明出处)

    1:this在构造方法中:this可以进行构造方法中的相互调用,this(参数): 2:this调用方法中,代表调用该方法的对象的地址,例如下面的代码比较 package thisTest; publ ...

  4. JS基础_字面量和变量

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. luogu题解 P1707 【刷题比赛】矩阵加速递推

    题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...

  6. HDFS NFS Gateway

    NFS网关支持NFSv3,并允许将HDFS作为客户端本地文件系统进行挂载.目前,NFS Gateway支持并启用以下使用模式: 用户可以通过NFSv3客户端兼容操作系统上的本地文件系统浏览HDFS文件 ...

  7. 禁止antd Input.Password浏览器自动回传

    设置autoComplete为new-password

  8. python的加密方式

    MD5加密 这是一种使用非常广泛的加密方式,不可逆的,在日常字符串加密中经常会用到,下面我简单介绍一下这种方式,主要用到Python自带的模块hashlib,测试代码如下,先创建一个md5对象,然后直 ...

  9. mysoft

    @@a8649fbb56349908b5ca6708fb94b3ddabcf6b97381a9797d3dfb139b8749287117@@##74e02e1207e5a0a8996ba89f1d6 ...

  10. 标准C语言(9)

    C语言里所有文字信息必须记录在一组连续的字符类型存储区里所有文字信息必须以字符'\0'做结尾,这个字符的ASCII码就是0符合以上两个特征的内容叫字符串,它们可以用来在程序里记录文字信息.字符串里'\ ...