我使用的环境为:Windows10、python3.6、scapy 2.4.0
一、基本知识

Sniff方法定义:sniff(filter="",iface="any", prn=function, count=N)filter的规则使用 Berkeley Packet Filter (BPF)语法
iface用来指定要在哪个网络接口上进行抓包(通常不指定即所有网络接口)
prn指定回调函数,每当一个符合filter的报文被探测到时,就会执行回调函数,通常使用lambda表达式来写回调函数
count指定最多嗅探多少个报文(是指符合filter条件的报文,而非所有报文)filter写法举例:抓取源地址为 www.baidu.com 的报文:>>> sniff(filter="ip src www.baidu.com", iface=ifs, prn=lambda x:x.summary(), count=3)Ether / IP / TCP 14.215.177.39:https > 192.168.2.204:6593 A / Padding
Ether / IP / TCP 14.215.177.39:https > 192.168.2.204:6593 A / Padding
Ether / IP / TCP 14.215.177.39:https > 192.168.2.204:6593 A / Raw
Out[15]: <Sniffed: TCP:3 UDP:0 ICMP:0 Other:0>抓取目的地址网段为192.168.2.204/24的报文,没有设置count,所以会一直输出:>>> sniff(filter="dst net 192.168.2.204", iface=ifs, prn=lambda x:x.summary())Ether / IP / TCP 180.97.162.191:8202 > 192.168.2.204:4963 PA / Raw
Ether / IP / TCP 180.97.162.191:8202 > 192.168.2.204:4963 PA / Raw
Ether / IP / TCP 180.97.162.191:8200 > 192.168.2.204:4967 PA / Raw / Padding
Ether / IP / TCP 180.97.162.191:8202 > 192.168.2.204:4963 PA / Raw
。。。抓取非ICMP的报文:>>> sniff(filter="not icmp", iface=ifs, prn=lambda x:x.summary(), count=3)Ether / IP / TCP 192.168.2.204:4963 > 180.97.162.191:8202 A
Ether / IP / TCP 180.97.162.191:8202 > 192.168.2.204:4963 PA / Raw
Ether / IP / TCP 192.168.2.204:4962 > 180.97.162.191:8202 A
Out[9]: <Sniffed: TCP:3 UDP:0 ICMP:0 Other:0>prn函数举例:
将抓取到的报文的summary打印出来:>>> sniff(filter="", iface=ifs, prn=lambda x:x.summary(), count=3)
Ether / IP / TCP 180.97.162.191:8202 > 192.168.2.204:4963 PA / Raw
Ether / IP / TCP 192.168.2.204:4963 > 180.97.162.191:8202 A
Ether / IP / TCP 180.97.162.191:8202 > 192.168.2.204:4963 PA / Raw
<Sniffed: TCP:3 UDP:0 ICMP:0 Other:0>将所有IP报文的源地址打印出来:>>> sniff(filter="", iface=ifs, prn=lambda x:x[IP].src, count=3)180.97.162.191
192.168.2.204
14.215.177.39
<Sniffed: TCP:3 UDP:0 ICMP:0 Other:0>也可使用回调函数:def packet_callback(packet):print packet.show()sniff(prn=packet_callback, count=10)

二、代码示例

import os
from scapy.all import sniff,wrpcap,Raw,IP,TCPdef get_pcap(ifs,ip=None,size=100):''' 获取指定 ifs(网卡), 指定数量size 的数据包;如果有指定ip,则这里只接收tcp,80端口,指定ip的包 '''filter = ""if ip:filter += "ip src %s and tcp and tcp port 80"%ipdpkt = sniff(iface=ifs,filter=filter,count=size)else:dpkt = sniff(iface=ifs,count=size)# wrpcap("pc1.pcap",dpkt) # 保存数据包到文件return dpktdef get_ip_pcap(ifs,sender,size=100):''' 获取指定 ifs(网卡), 指定发送方 sender(域名或ip) 的数据包size:(一次获取数据包的数量) '''if 'www.' in sender:v = os.popen('ping %s'%sender).read()ip = v.split()[8]print("准备接收IP为 %s 的数据包..."%ip)else:ip = senderprint("准备接收IP为 %s 的数据包..."%ip)count = 0  while count<10:d = get_pcap(ifs,ip=sender,size=size)for i in d:try:if i[IP].src==ip: # 发送方的IP为:ip  接收方的IP:i[IP].dst==ipprint(i[Raw].load)except:passcount+=1def main():ifs = 'Realtek PCIe GBE Family Controller' # 网卡ip = "116.4.8.127"  # ip地址,也可写域名,如:www.baidu.comget_ip_pcap(ifs,ip,size=1)  # 一次接收一个包if __name__ =='__main__':main()

保存文件为:grab_unpack.py
然后打开网站页面,是一个动态刷新的图,效果如下:

执行:python grab_unpack.py
输出结果:

其中最后面以 zx 为键的 json 数据就是我想要的数据,而这是ajax请求过来的数据

注:此代码只是个人根据当时的环境满足了当时的需求,记录下来用做后续参考!如有问题,请检查软硬件环境是否一致,由于时间精力有限,大部分未做详细环境描述。

python 抓包与解包相关推荐

  1. python3 抓包 解包_Python结构包,解包

    python3 抓包 解包 Python struct module is capable of performing the conversions between the Python value ...

  2. python解包exe_解包 Python 3 的安装包

    Python 3 使用的是一种叫做 WiX Toolset 安装包格式.吐个槽:目前只见过 Python 用这种安装包格式 WiX Toolset 提供了一个工具 dark.exe 可以解开这种格式的 ...

  3. 微信小程序抓包与逆向+微信小程序反编译教程+解包教程+解包工具

    免责声明 做视频的初衷是为了学习交流,是想让自己在分享过程中学习到更多的东西 本人发布的视频.环境.软件.脚本.文章.资料等,都只用于学习交流安全技术,请不要用于任何非法用途, 否则后果自付 部分技术 ...

  4. python 中参数 ,解包和变量的入门

    from sys import argv scrip,first,second,third=argvprint('',scrip) print('',first) print('',second) p ...

  5. python list tuple 打包 解包_python的打包与解包

    python的*与**,在函数的定义与调用过程中,有着不同的作用 打包参数: 一.函数定义时,形参前加*号(如:*args):收集实参中所有的位置参数,打包成新元组并将该元组赋值给args变量 实参位 ...

  6. 详解Python中的序列解包(2)

    8个月前曾经发过一篇关于序列解包的文章,见详解Python序列解包,本文再稍作补充. 可以说,序列解包的本质就是把一个序列或可迭代对象中的元素同时赋值给多个变量,如果等号右侧含有表达式,会把所有表达式 ...

  7. ozip解密_ozip解包工具下载oppo刷机包ozip解包一加ops解包

    支持机型及测试说明 OPPO卡刷包是ozip格式,需要解密处理才能转回zip格式,第三方recovery才能刷入, 由于OPPO每个型号采用了不同的解密key,所以需要对机型做适配.本文从网络搜集整理 ...

  8. python-装包与解包

    装包与解包的理解:[装包]就是把未命名的参数放到元组中,把命名参数放到字典中[拆包]将一个结构中的数据拆分为多个单独变量中 *args **kwargs python 数据类型可以装包拆包:      ...

  9. C杂讲 字符串格式化 组包与解包

    知识点1[sprintf组包] 案例: int sprintf(buf,"格式",数据) //buf:用来存放组好的报文 //"格式":按照格式组包 //数据: ...

  10. java socket发送定长报文_定长消息报文的组包与解包简单封装(Java实现)

    报文 组包 解包 在实际项目中经常会碰到不同系统之间的数据交换,有些是用webservice.有些则是使用发socket消息的方式,将需要发送的消息组装成特定格式的字符串或Xml格式的文件,再通过so ...

最新文章

  1. Vivado 中IP报严重警告Could not find module的解决办法
  2. h5 调起相机_Html5在手机端调用相机的方法实现
  3. MySQL索引使用方法和性能优化
  4. CTFshow php特性 web112
  5. word2003如何设置护眼模式_连锁企业如何设置「单店盈利模式」?
  6. 电力电子应用技术_RFID技术应用在电力行业工具管控
  7. Whois查询接口文档
  8. 巨一自动化工业机器人_工业机器人和自动化设备连接器
  9. 怎么自学plc和自动化技术?
  10. 把antd组件的英文切换为中文
  11. VSCode更改默认浏览器
  12. 程序员如何缓解眼睛疲劳酸痛症状?
  13. java.net.SocketException: Unrecognized Windows Sockets error: 10106: create
  14. 群友(淡泊、明志)总结android面试题
  15. 运维派 企业面试题2 创建10个 十个随机字母_test.html 文件
  16. Bailian2755 神奇的口袋【递归+DP】
  17. 将Maven项目直接用Tomcat运行
  18. 欧盟玩具标准EN71-3更新至2019版
  19. 京东试用机器人 油猴代码待修复
  20. Matplotlib学习笔记(三)

热门文章

  1. Oracle12C安装
  2. html相对路径信用卡的js,用javascript解析信用卡信息
  3. IBM P系列日常管理——服务器的故障分析和处理
  4. ROS小车记录系列(四)利用cartographer定位,修改源码发布pose话题
  5. 火爆程度超过微信:最近全网刷屏的社交APP突然下架了
  6. [转]世界上最伟大的推销员-羊皮卷之一
  7. SQL生成整年日期表(全)
  8. aws云平台架构师 收入_收入15万美元的云架构师可能被低薪
  9. matlab解决奥数题,六年级奥数题及答案:解决问题
  10. 北京市青少年体育培训机构等级评定办法