利用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 ...
随机推荐
- Rancher2.0构建kubernetes(K8S)集群
一.环境准备 1.准备至少3台CentOS7版本的虚拟机 # IP地址 主机名称 192.168.1.160 rancher 192.168.1.161 master 192.168.1.162 no ...
- Java - 线程池设计与选择
http://ifeve.com/how-to-calculate-threadpool-size/ 任务一般可分为:CPU密集型.IO密集型.混合型,对于不同类型的任务需要分配不同大小的线程池. C ...
- 【CSS学习】--- 背景
一.前言 元素的背景区域包括:元素的内容.内边距和边框区域. CSS中用于设置背景的属性有: background-color 设置背景颜色 background-image 设置背景图片 backg ...
- SQL Anywhere5.5: Metadata
http://dcx.sybase.com/1101/en/dbprogramming_en11/ianywhere-data-sqlanywhere-saconnection-getschem633 ...
- 自定义jq插件,鼠标悬浮展示图片或者视频放大图,可自定义展示内容
网站项目经常会遇到一些视频或者图片素材的展示功能,那么就需要自己写一个功能,就是在一些列表页面你想要是这个数据的详细内容,弹框在页面某个位置 例如这是视频悬浮展示效果,可自定义自动播放等属性标签 又例 ...
- 【代码笔记】Web-利用Dreamweaver实现表格
一,打开Dreamweaver---->File---New---->如下图所示.选择HTML,点击OK. 二,会出现如下图所示界面.把光标放到Body处. 三,Insert---> ...
- 【读书笔记】iOS-后台运行模式
苹果在关于后台模式的文档中称:“这个配置项应该尽可能少的使用,而且最好只给那些提供通知服务的应用使用.如果有在后台运行的替代方法,就应该使用替代方法.比如,如果应用能使用显著位置变化接口来接受位置变动 ...
- video自动禁止全屏
在微信浏览器.苹果等其他浏览器,里面使用video标签,会自动变成全屏,改成下面就好了,起码可以在video标签之上加入其他元素 webkit-playsinline playsinline x ...
- Django中使用bookstarp框架(4)
Django中使用bookstarp框架(4) 注意:要使用bookstarp框架前,要先有css的基础 因为主要是研究后台的使用方法,就引入前端的框架,简化html上的耗时(主要是不想把时间浪费在前 ...
- chrome新版打开新标签页自动打开谷歌主页
最近更新了chrome,发现新版有个问题. 打开标签页时会自动跳转至 https://www.google.com/webhp?ie=UTF-8&gws_rd=cr&rct=j 导致我 ...