这边博文主要讲一下怎么使用arp欺骗进行流量截获,主要用于已经攻入内网以后,进行流量监听以及修改。

一、什么是arp

    arp协议是以太网的基础工作协议,其主要作用是是一种将IP地址转化成物理地址的协议,在以太网上进行通信的时候并不直接使用ip地址作为主机标识,而是使用MAC地址,也就是物理地址。

    某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后,就会进行数据传输。如果未找到,则A广播一个ARP请求报文(携带主机A的IP地址Ia——物理地址Pa),请求IP地址为Ib的主机B回答物理地址Pb。网上所有主机包括B都收到ARP请求,但只有主机B识别自己的IP地址,于是向A主机发回一个ARP响应报文。其中就包含有B的MAC地址,A接收到B的应答后,就会更新本地的ARP缓存。接着使用这个MAC地址发送数据(由网卡附加MAC地址)。因此,本地高速缓存的这个ARP表是本地网络流通的基础,而且这个缓存是动态的。

    本地的arp缓存可以通过arp –a命令查看。

二、arp欺骗的工作原理

    假定C想监听A和B之间的通信,那么第一步就是C告诉A,我是B;同时高速B,我是A,这样A和B都会把发给对方的数据发送到C这里。

第二步C对收到的数据进行处理,然后再转发给真正的接收者。

    基本原理非常简单,就上面两句话,但是怎么做到的呢?我稍微详细说一下。

    第一步MAC 地址误导

    C怎么欺骗A,告诉他我才是B呢?

    这就是利用了ARP协议的一个标准请求,大家想一下,如果B想要给A发送数据的时候,如果他不知道A的MAC地址,就会在以太网(可以认为是这个局域网)广播一下,我是B,谁知道A的MAC地址是什么?为什么C不可以伪造这个过程呢?如果C伪造一个请求,在请求里面把IP地址下成B的,但是这个IP地址对应的MAC地址写成C自己的,那么A收到以后自然就会认为B的MAC地址是MAC C了。

    不过这样做有一个问题就是,网络上所有的主机都会形成这种错误认识,这个显然是不行的,因为我就想监听A和B之间的通信,不想监听A和所有主机的通信啊,那么怎么办呢?

    其实也很简单,就是一个小技巧,正常的ARP请求包中,因为不知道对方的MAC地址是什么,所以目的MAC填写的是广播地址FF:FF:FF:FF:FF:FF,这也就导致了所有的人都收的到,因为我们知道A的真实MAC地址是MAC A,所以在以太网帧中的目的MAC填写上MAC A,这样其他主机就会忽略该ARP请求,也就不会干扰其他主机的正常通信。

    同理,C也可以这样欺骗B,告诉它其实A的MAC地址是MAC C。

    第二步 进行包转发

    A和B发给对方的数据包都发到了C这里,那么肯定就不能正常通信,这样A和B就无法进行正常通信了,自然也就没必要进行监听了。

    所有C在收到包以后就必须进行转发,比如收到A发送给B的包以后,再将目的MAC地址修改为B真正的MAC B,然后再发送出去,这样B才能收到。同理对于B给A的数据包也一样。

    这里其实还有一个问题就是我们怎么判断这个数据包是A发送给B的呢?这个可以通过IP头中的目的IP是B和源IP是A来判断。那么会不会出现是A发送给B,但是目的IP不是B的这种情况呢?基本上只有一种例外情况,就是B是网关,那么A发送到外网的IP数据包都要发送到B,但是目的IP却可能是任意IP,不过这个IP地址却一定不是本局域网的IP。

    因此后一种情况可以通过指明B是网关,想监听A的一切外网访问来识别。

 

arp欺骗进行流量截获-1的更多相关文章

  1. arp欺骗进行流量截获-2

    上一篇讲了原理,那么这一篇主要讲如何实现.基本上也就是实现上面的两个步骤,这里基于gopacket实现,我会带着大家一步步详细把每个步骤都讲到. ARP 欺骗 首先就是伪造ARP请求,让A和B把数据包 ...

  2. ARP欺骗与MITM(中间人攻击)实例

    ARP协议(address resolution protocol):地址解析协议 一台主机和另一台主机通信,要知道目标的IP地址,但是在局域网中传输数据的网卡却不能直接识别IP地址,所以用ARP解析 ...

  3. 关于ARP欺骗与MITM(中间人攻击)的一些笔记( 二 )

    一直没有折腾啥东西,直到最近kali Linux发布,才回想起应该更新博客了….. 再次说明,这些技术并不是本人原创的,而是以前记录在Evernote的旧内容(排版不是很好,请谅解),本文是继关于AR ...

  4. arp协议分析&python编程实现arp欺骗抓图片

    arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...

  5. 利用ARP欺骗进行MITM(中间人攻击)

    ARP欺骗主要骑着信息收集得作用,比如可以利用欺骗获取对方流量,从流量分析你认为重要得信息 0X01  了解ARP Arp协议 ARP(Address Resolution Protocol,地址解析 ...

  6. Arp欺骗和DNS投毒的实验性分析

    1.中间人攻击之Arp欺骗/毒化 本文涉及网络安全攻击知识,随时可能被永久删除.请Star我的GitHub仓库 实现原理: 这种攻击手段也叫做中间人攻击MITM(Man-in-the-Middle) ...

  7. 网络层主要协议与arp欺骗

    网络层主要协议与arp欺骗 目录 网络层主要协议与arp欺骗 一.网络层(Network Layer) 1.网络层的功能 2.IP数据报(IP Datagram) 二.网络层的主要协议 1.ICMP协 ...

  8. kali Linux 渗透测试 | ARP 欺骗

    目录 ARP 欺骗及其原理 ARP 欺骗实施步骤 必备工具安装 nmap 工具 dsniff 工具 driftnet 工具 ettercap 工具 ARP 欺骗测试 ARP 断网攻击 ARP 欺骗(不 ...

  9. 使用ARP欺骗, 截取局域网中任意一台机器的网页请求,破解用户名密码等信息

    ARP欺骗的作用 当你在网吧玩,发现有人玩LOL大吵大闹, 用ARP欺骗把他踢下线吧 当你在咖啡厅看上某一个看书的妹纸,又不好意思开口要微信号, 用arp欺骗,不知不觉获取到她的微信号和聊天记录,吓一 ...

随机推荐

  1. Spring 循环依赖

    循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA,则它们最终反映为一个环.此处不 ...

  2. xunsearch进阶使用

    目录 设置分页 设置排序 读取文档结果 搜索结果高亮处理 获取数量 获取热门搜索词 获取相关搜索词 设置分页 $search->setLimit(5); // 设置返回结果为前 5 条 $sea ...

  3. SQL语句替换字段内容例子

    SELECT REPLACE(SysFuncID,'7201','7204') ,           CASE           WHEN Flag=1 THEN REPLACE(funcname ...

  4. log4net 使用总结- (3)在ASP.NET MVC 中使用

    把输出到sqlserver数据库中. 输出到数据库中和文件中类似,具体配步骤如下 第一步.创建数据库 CREATE TABLE [dbo].[Log] ( [Id] [int] IDENTITY (1 ...

  5. springboot成神之——发送邮件

    本文介绍如何用spring发送邮件 目录结构 依赖 MailConfig TestController 测试 本文介绍如何用spring发送邮件 目录结构 依赖 <dependency> ...

  6. 点击jQuery Mobile的按钮改变颜色

    jquery-mobile-移动 我有这样的代码来改变点击一个按钮的颜色: $('.fav').live('click', function(e) { $(this).buttonMarkup({ t ...

  7. jenkins容器权限被拒绝

    问题,我们从官网上面pull下jenkins后,如果直接运行容器的没问题 docker run -d -p 8080:8080 -v jenkins:latest 不过我们可能需要映射下容器内部的地址 ...

  8. java中的报错机制

    异常:Exception,程序运行过程中因为一些原因,使得程序无法运行下去 注意:在程序能够运行起来的情况,不是程序编译通不过 举例:读文件,点击一个按钮,文件不存在:访问数据库服务器,数据库服务器停 ...

  9. 41、Aspera下载安装运用

    参考:http://www.so.com/linkm=aLVHG%2FgJT4HyuVeK4%2BxX2LMFvF6oTiTCaruHE20pwjRia7DmVI2hIVfmw%2BFNPczCtvX ...

  10. .net对Cookie的简单操作

    1 声明:HttpCookie MyCookie= new HttpCookie("test"); 2增加:MyCookie.Values.Add("key1" ...