利用python scapy包进行抓包发包与ARP扫描
小技巧
通过在交互式的python解释器下,可以通过help()函数查看函数或模块的用途。
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表
ls(),查看选项,如 ls(ARP)
安装
python3,Ubuntu 18.04环境
sudo apt install python3-pip
pip3 install scapy
导入
from scapy.all import *
构造包
scapy通过重载'/'符号,能够一层一层的构造包,比如构造一个ARP请求包
arpPkt = Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst="172.16.128.85")
发送 与 接受
send 与 sendp,都只发送,且send 只能发送三层协议,而sendp才能发送二层协议。
send(IP())
sendp(Ether()/IP())
sr与srp,发送并接受,且sr不能发送二层协议,srp才能。
两个的返回值为 响应与没收到响应元组。
>>> ans,unans = srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst="172.16.85.128"),iface="vmnet8")
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
>>> type(ans)
<class 'scapy.plist.SndRcvList'>
>>> type(ans[0])
<class 'tuple'>
>>> ans[0]
(<Ether dst=FF:FF:FF:FF:FF:FF type=0x806 |<ARP pdst=172.16.85.128 |>>, <Ether dst=00:50:56:c0:00:08 src=00:0c:29:90:8d:a1 type=0x806 |<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=00:0c:29:90:8d:a1 psrc=172.16.85.128 hwdst=00:50:56:c0:00:08 pdst=172.16.85.1 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>)
>>> type(ans[0][0])
<class 'scapy.layers.l2.Ether'>
>>> type(ans[0][1])
<class 'scapy.layers.l2.Ether'>
>>> ans[0][0].dst
'FF:FF:FF:FF:FF:FF'
>>> ans[0][0].src
'00:50:56:c0:00:08'
>>> ans[0][1].dst
'00:50:56:c0:00:08'
>>> ans[0][1].src
'00:0c:29:90:8d:a1'
>>> ans[0][1][1].show()
###[ ARP ]###
hwtype = 0x1
ptype = 0x800
hwlen = 6
plen = 4
op = is-at
hwsrc = 00:0c:29:90:8d:a1
psrc = 172.16.85.128
hwdst = 00:50:56:c0:00:08
pdst = 172.16.85.1
###[ Padding ]###
load = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> ans[0][1][1].psrc
'172.16.85.128'
通过以上分析,可以知道,ans为一个发送与接受的列表,其包含发送与接受的元组。元组中下标为0为发送的数据,下标为1为接受到的数据。且返回数据包中,可以通过下标提取固定的协议数据
sr1,srp1 是 sr,srp的简化版本
>>> ans= srp1(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst="172.16.85.128"),iface="vmnet8")
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
>>> type(ans)
<class 'scapy.layers.l2.Ether'>
>>> ans.pdst
'172.16.85.1'
发送并只接受第一个返回的数据包.返回值为接受到的第一个数据包,没有收到数据时,返回None
抓包
通过sniff抓取数据包
eg:
>>> packets = sniff(iface="wlp58s0",count=20)
>>> type(packets)
<class 'scapy.plist.PacketList'>
>>> type(packets[0])
<class 'scapy.layers.l2.Ether'>
局域网ARP扫描器
#!/usr/bin/python3
from scapy.all import *
if __name__ == "__main__":
netif = "vmnet8" #net iface
ip_prefix = "172.16.85."
live_host = {};
for i in range(1,255):
ip_str = ip_prefix + str(i)
print("ip:",ip_str)
arp_req_pkt = Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=ip_str)
arp_rsp_pkt = srp1(arp_req_pkt,iface=netif,timeout=0.01)
if arp_rsp_pkt != None:
live_host[arp_rsp_pkt.psrc] = arp_rsp_pkt.hwsrc
for key,value in live_host.items():
print(key,value)
Links
https://scapy.readthedocs.io/en/latest/introduction.html#about-scapy
利用python scapy包进行抓包发包与ARP扫描的更多相关文章
- Android利用Fiddler进行网络数据抓包
最新最准确内容建议直接访问原文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信 ...
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...
- [转] Android利用Fiddler进行网络数据抓包
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...
- MX2怎样利用Fiddler进行网络数据抓包
首先须要保证PC与手机在同一局域网内或有独立公网IP, 下面以在同一局域网为例(保证手机能訪问到这台PC机器): 1. PC端配置 1). 安装Fiddler 2). 开启Fiddler下面功能: ...
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总,使用mono运行filddler
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- 什么是"抓包"?怎样"抓包"?
你是网络管理员吗?你是不是有过这样的经历:在某一天的早上你突然发现网络性能急剧下降,网络服务不能正常提供,服务器访问速度极慢甚至不能访问,网络交换机端口指示灯疯狂地闪烁.网络出口处的路由器已经处于满负 ...
- 使用wireshark抓包分析-抓包实用技巧
目录 使用wireshark抓包分析-抓包实用技巧 前言 自定义捕获条件 输入配置 输出配置 命令行抓包 抓取多个接口 抓包分析 批量分析 合并包 结论 参考文献 使用wireshark抓包分析-抓包 ...
- pcapng文件的python解析实例以及抓包补遗
为了弥补pcap文件的缺陷,让抓包文件可以容纳更多的信息,pcapng格式应运而生.关于它的介绍详见<PCAP Next Generation Dump File Format> 当前的w ...
随机推荐
- JavaScript 变量作用域 详解
变量作用域要点 - 在JavaScript中没有块级作用域,只有函数作用域 - 在函数体内,局部变量的优先级高于同名的全局变量 - 在全局作用域编写代码时可以不写var语句,但声明局部变量时必须使用v ...
- 项目开发版本控制----Git
版本控制的工具我早之前用的svn,后来换成了git.同样是版本控制,为什么要换呢?肯定是有原因的啦~ 一.Git和SVN的比较 svn的优缺点 优点: 1.管理方便,逻辑明确,符合一般人思维习惯. 2 ...
- vue常用笔记
vue源码解析(勾三股四):http://jiongks.name/blog/vue-code-review/ 0.npm: https://www.npmjs.com/ 1. package.jso ...
- pycharm技巧
常用快捷键 1.Ctrl + Enter:在下方新建行但不移动光标: 2.Shift + Enter:在下方新建行并移到新行行首: 3.Ctrl + /:注释(取消注释)选择的行: 4.Ctrl + ...
- HTTP协议web开发知识点
HTTP协议 HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数 ...
- pycharm如何新项目如何不默认创建虚拟环境(吐槽)
最近因为工作上的需要,琢磨了一下python,装了pycharm这个号称史上最好的编辑器,还没开始玩,就被整崩溃了. 因为我是刚开始玩这个,写了很多hello world,所以新建项目的时候很多,不知 ...
- Application.Current的使用
来源 http://www.cnblogs.com/symons/archive/2010/03/15/1686200.html Application.Current的使用 WPF程序对应一个App ...
- 【转】对cocos2d 之autorelease\ratain\release的理解
原文链接:http://blog.sina.com.cn/s/blog_4057ab6201018y4y.html Objective C内存管理进阶(二):理解autorelease: http:/ ...
- 使Volley完美支持自定义证书的Https
其实在最早的版本里,Volley甚至是不支持https协议的,只能跑http,当然你也可以自己修改他的源码让他支持,如今volley的代码经过一些改进以后, 已经可以完美支持https协议了,无论是在 ...
- Expo大作战(三十八)--expo sdk api之 FileSystem(文件操作系统)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...