导入scapy包

from scapy.all import *

构造包

a = Ether()/IP(dst='114.114.114.114')/TCP(dport=80)/应用层数据

我们如果记不得每个包的选项使,可以使用show()来查看

print(a.show())

发送包

  1. sr(IP(dst=‘192.168.1.0/24’)/TCP(dport=(1,65535)), timeout=2) :发送三层数据包,等待接收一个或多个数据包的响应(注意:当依次向每个IP的65535个端口发送完才算执行完这个函数,而不是调用一次只发一个包,以下所有发包方式都与之一样)
  2. sr1() :发送三层数据包,并仅仅只等待接收一个数据包的响应
  3. srp(Ether(dst=‘11:11:11:11:11:11’)/IP(dst=‘1.1.1.1’)/ICMP()): 发送二层数据包,并且等待回应(这个函数可以编辑二层头部,sr()不能编辑二层头部)
  4. send():仅仅发送三层数据包,不等待回包(发完就拉倒了)
  5. sendp():仅仅发送二层数据包,不等待回包

解析回包

  1. sr
reply_packet = sr(IP(dst='114.114.114.114')/ICMP(), timeout=2)print(reply_packet)
结果:返回的是元组
(<Results: TCP:0 UDP:0 ICMP:1 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)

第一个元素为接收到的包,第二个元素为没有收到的包

print(reply_packet[0].res)
结果:返回的是列表
[(<IP  frag=0 proto=icmp dst=114.114.114.114 |<ICMP  |>>, <IP  version=4 ihl=5 tos=0x0 len=28 id=32921 flags= frag=0 ttl=75 proto=icmp chksum=0xbb37 src=114.114.114.114 dst=172.20.163.23options=[] |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>)]

列表里面为所有回包情况,一个元素(元组)为一个回包. 其元组中第一个元素为发送的包,第二个元素为返回的包

查看回包各项属性:

print(reply_packet[0].res[0][1].fields)
结果:返回的是字典类型
{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 56445, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 75, 'proto': 1, 'chksum': 24403, 'src': '114.114.114.114', 'dst': '172.20.163.23','options': []}

reply_packet[0].res[0][1]这一层就相当于是真正的回包包体了,包体可以用fields属性(返回字典)和show方法(返回字符串)来查看其内容. 而前面几层都是对数据包的一些统计描述.

  1. sr1
reply_packet = sr1(IP(dst='114.114.114.114')/ICMP(), timeout=2)print(reply_packet)
结果:b'E\x00\x00\x1c\xe0\xd8\x00\x00H\x01]\xf8rrrr\xac\x14\xa3\x17\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

sr1返回的对象没有太多复杂东西,直接相当于sr返回对象的reply_packet[0].res[0][1],可以理解为sr1返回的对象是sr返回对象的一个子集.

print(reply_packet.fields)
结果:字典类型{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 19164, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 66, 'proto': 1, 'chksum': 63988, 'src': '114.114.114.114', 'dst': '172.20.163.23', 'options': []}

sr1的reply_packet == sr的reply_packet[0].res[0][1], 所以可以和sr一样直接用fields来读取其内容.

  1. srp
reply_packet = srp(Ether(dst='00:23:89:bb:c7:85')/IP(dst='114.114.114.114')/ICMP())print(reply_packet[0].res[0][1].fields)
结果:返回类型是字典
{'dst': '00:0c:29:d9:3f:63', 'src': '00:23:89:bb:c7:85', 'type': 2048}

注意:这里默认只给出了二层头部,可以通过调节res后第三位的值来选择性查看每层信息,res的第三位[0]表示精确到第几层,[0]代表二层,[1]进一层到IP层,[2]进一步到传输层,[3]进一步到应用层
例:

print(reply_packet[0].res[0][1][1].fields)
结果:{'version': 4, 'ihl': 5, 'tos': 0, 'len': 28, 'id': 62339, 'flags': <Flag 0 ()>, 'frag': 0, 'ttl': 67, 'proto': 1, 'chksum': 20557, 'src': '114.114.114.114', 'dst': '172.20.163.23', 'options': []}print(reply_packet[0].res[0][1][2].fields)
结果:
{'type': 0, 'code': 0, 'chksum': 65535, 'id': 0, 'seq': 0}print(reply_packet[0].res[0][1][3].fields)
结果:{'load': b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}

抓包、分析包

  • prn指向一个回调函数,意为将收到的包丢给prn指向的函数处理(注意:回调的意义!每收到一个包就丢到回调函数里执行一下,执行完了才再跑回来继续抓包)

  • filter为包过滤规则(语法参照tcpdump过滤规则)

  • store为是否要存储抓到的包(注意,如果没有存储则不会将抓到的包赋值给a,因为没有存下就没有东西可以赋,此参数默认开启)

  • timeout为抓包时长,比如抓30秒就结束(注意:如果没有指定抓包时长则会一直抓下去,程序会一直卡在这里)

  • iface为指定抓包的网卡

a = sniff(prn=abc, filter='tcp port 80 and ip 192.168.1.1', store=1, timeout=30, iface='eth0')

wrpcap('packet.cap', a) ======> 此函数可以将抓到的包存到本地(注意:将包写入本地不能使用open(‘packet.cap’, ‘r’),因为open函数只能写入字符串)。

bbb = rdpcap('/root/桌面/ftp_pcapng.cap') =======> 此函数可以将本地存储的数据包读取出来

for i in bbb: =======> 读取出来的对象是由N个数据包组成的可迭代对象,每次迭代一个包

try: ======> 有些包可能没有要提取的对象,当提取包里没有的属性时则会报错,所以捕获异常好让程序继续往下执行print(i.getlayer('Raw').fields['load'].decode().strip())     ======> 输出数据包的应用层负载except :continue

python安全攻防---scapy使用相关推荐

  1. python安全攻防---scapy基础---计算机网络各层协议

    网络层次划分 比较常用的是TCP/IP五层协议. 0x01应用层 应用层是网络应用程序以及它们的应用层协议存留的地方.应用层协议和应用程序直接挂钩 DHCP(Dynamic Host Configur ...

  2. python黑客攻防入门下载-Python键盘钩取的自我理解(来源于《Python黑客攻防入门》)...

    最近从图书馆借到一本书<Python黑客攻防入门>,感觉里面的提供的代码模块对自己深有感触(主要我超菜),所以打算尝试写点小分析,希望大家能谅解本人的语言组织与技术分析. 希望有人来讨论. ...

  3. Python安全攻防-3渗透测试框架

    最近新买了一本关于Python的一本书<Python安全攻防渗透测试实战指南>,这本书出自MS08067安全实验室,才学到第三章,虽然书中有非常多的低级语法错误,但是总体来讲还是值得一学的 ...

  4. Python黑客攻防(八)密码破解攻击

    前言 进行黑客攻击通常需要做大量重复性工作.如果黑客直接通过浏览器攻击Web网站,就要不断手动修改输入值,并反复点击.但如果可以在应用程序内部访问Web网站并接收结果值,那么只需要使用简单的几行代码就 ...

  5. 【保姆级】黑客入门教程「Python安全攻防:渗透测试实战指南」经典纯狱风~

    前言 网络江湖,风起云涌,攻防博弈,从未间断,且愈演愈烈.从架构安全到被动纵深防御,再到主动防御.安全智能,直至进攻反制,皆直指安全的本质--攻防.未知攻,焉知防! 每一位网络安全从业者都有仗剑江湖的 ...

  6. 【Python安全攻防:渗透测试框架】MS08067: 杀死那个pocsuite!

    [Python安全攻防基础篇:闭包和解释器] [Python安全攻防基础篇:包.模块.类.对象] 项目地址:https://github.com/knownsec/pocsuite3 曲线救国:htt ...

  7. 黑客零基础入门教程《Python安全攻防:渗透测试实战指南》极致经典,学完即可包吃包住

    前言 网络江湖,风起云涌,攻防博弈,从未间断,且愈演愈烈.从架构安全到被动纵深防御,再到主动防御.安全智能,直至进攻反制,皆直指安全的本质--攻防.未知攻,焉知防! 每一位网络安全从业者都有仗剑江湖的 ...

  8. “Python安全攻防” 一周年汇总 暨 Python安全开发 2.0(第二期)发布

    出品|MS08067实验室(www.ms08067.com) "Python安全知识星球"第一期"Python安全攻防"于2021年05月14日全部结束了,第一 ...

  9. 内部视频放送 |《Python安全攻防:渗透测试实战指南》知识星球

    如果你立志成为一名合格的安全从业者,想突破"脚本小子"的瓶颈,成为真正的黑客,想拥有自己打造出来的属于自己的神兵利器!<Python安全攻防:渗透测试实战指南>马上就要 ...

最新文章

  1. GPT-3:被捧上天的流量巨星,却有重大缺陷,很危险...
  2. JSP具体条款——response对象
  3. PWM 发生器模块设计
  4. 【心得】Ctrl+Z、\n、\0、eof的区别和用法
  5. 三个线程按顺序输出数字
  6. Azkaban运行报错:我找到的几个错误问题
  7. 计算机系统-电路设计11-内存的内部电路实现(输入与输出同线)
  8. 讲一个让你们难过很久的故事吧?
  9. 进行 HTML、JavaScript 和 Ajax 开发和调试的必用工具
  10. vue 点击div 获取位置_Vue中div contenteditable 的光标定位方法
  11. Wireshark 提示和技巧 | TCP Reassembly
  12. 有 4 名同学到一家公司参加三个阶段的面试
  13. go IO操作-文件写
  14. 《Monkey Android》第15课Spinner和AutoCompleteTextView
  15. Bootstrap中tooltip插件使用 | 爱骇客
  16. 星界边境联机服务器未响应,星界边境Starbound联机注意事项
  17. android ota升级服务,android OTA 升级包含增量升级
  18. aop:aspectj-autoproxy的作用
  19. mysql权限层级体系_数据库mysql有哪些权限?层级有哪些?
  20. Google Cloud Platform免费申请试用后结算账号(Billing Account)自动关闭,不能开启的问题

热门文章

  1. input上传文件个数控制
  2. 重要·Flutter 首个预览版 发布
  3. CSS 文本溢出时显示省略标记
  4. laydate 时间控件去掉秒以及解决在移动端不能滑动的问题
  5. NTC3950-10K温度传感器
  6. node+mongodb+win7
  7. Android下Opengl ES实现单屏幕双眼显示
  8. DevExpress GridControl 后台设置列
  9. django第二个项目--使用模板做一个站点访问计数器
  10. [转载]SQL Plus 一些使用技巧