一、直接使用wireshark捕获数据包并保存为文件

可以使用wireshark通过图形界面的操作来实现捕获数据包并保存为文件。

wireshark默认捕获的数据包保存为临时文件,如果最后退出时不选择保存那么临时文件将会被删除。

可以在“菜单栏----捕获----选项----输出”窗口进行配置,指示wireshark直接将捕获结果保存为文件。

文件----数据包要保存到的文件

输出格式----数据包保存成的文件的文件格式

自动创建新文件----指示当当前文件达到某个指标后,就把后续数据包另存到另一个文件。(本质是通过关闭当前监听新启一个监听来实现)

使用一个环形缓冲器----只保存为那么多个文件,数量用完后从头形始覆盖。

以如上配置为例,截获结果如下:

二、使用tshark捕获数据包并保存为文件

tshark就是命令行版的wireshark(基于wireshark的多种表示,感觉wireshark部份功能也是调用tshark来实现的),所以也可以通过tshark来实现同样的效果。

使用-i指定网卡,使用-w实现文件,使用-F实现指定格式,使用-b实现自动创建新文件。

-i使用的网卡名,控制面版中看到的是什么就是什么,wireshark列出来的是什么就是什么。

Linux版形如:

tshark -i eth0 -b filesize: -F pcap -w test_pcap.pcap

Windows版形如:

tshark -i "本地连接 2" -b filesize: -F pcap -w test_pcap.pcap

三、使用pyshark捕获数据包并保存为文件

3.1 直接无法捕获数据包

pyshark本质是调用tshark,理论上捕获代码应形如下:

import pyshark

tshark_path = 'D:\\tools\\Wireshark\\tshark.exe'
capture = pyshark.LiveCapture(output_file="test_pcap.pcap",interface="本地连接 2",tshark_path=tshark_path)
capture.sniff(timeout=)

但是在python-3.6.6环境中无论是Linux还是Windows都捕获不到数据包(<LiveCapture (0 packets)>)

追踪代码看到在没指定网卡时pyshark是通过tshark -D来列出所有网卡,然后取网卡前序号形式来指定网卡

由上图可以看到“本地连接 2”序号为6,但代码改为形如下仍不能捕获到数据包

(其实使用网卡名和网卡序号两种方式tshark都是支持的,所以和这个无关;当然也不能算一定关系没有,传给pyshark的”本地连接 2“参数中间有空格,pyshark再传给tshark时不会自动加上引号tshark会因格式不对启不来,但这里也不是因为这个。)

import pyshark

tshark_path = 'D:\\tools\\Wireshark\\tshark.exe'
capture = pyshark.LiveCapture(output_file="test_pcap.pcap",interface="6",tshark_path=tshark_path)
capture.sniff(timeout=10)

后来看网上也有类似的情况,说是版本问题(我当前是0.4.1也一样的问题)而0.3.6.2版本是可以的,使用python2.7+0.3.6.2版本(pip install pyshark==0.3.6.2)确实可以成功保存数据包。

3.2 修改live_capture.py实现捕获数据包并保存为文件

pyshark-0.3.6.2在python-3.6装不上,要去用python2.7这是令人不爽的。

通过capture.set_debug()开启打印debug信息可以看到是tshark报错:tshark: You can't write both raw packet data and dissected packets to the standard output.排查之下发现是tshark的"-P"(打印汇总信息)和”-w -“(将原始数据包输出到控制台)冲突所致。

简单分析pyshark流程发现去除”-P“参数可解决捕获不到数据包的问题。操作如下:

打开pyshark的live_capture.py移动到72行,将原先的params = ["-q", "-P"]修改为params = ["-q"]

参考:

https://github.com/KimiNewt/pyshark

https://github.com/KimiNewt/pyshark/issues/222

Python3+pyshark捕获数据包并保存为文件的更多相关文章

  1. winPcap编程之打开适配器并捕获数据包(四 转)

    在贴源码之前先介绍一个将要用到的很重要的函数--pcap_open(),下面是pcap_open()在remote-ex.h中的声明: pcap_t *pcap_open(const char *so ...

  2. Winpcap笔记3之打开适配器并捕获数据包

    上一讲中知道了如何获取适配的信息,这一将我们讲写一个程序蒋每一个通过适配器的数据包打印出来. 打开设备的函数是pcap_open().函数原型是 pcap_t* pcap_open(const cha ...

  3. winpcap使用之捕获数据包

    第一种方法,调用回调函数 #include "pcap.h" /* packet handler 函数原型 */ void packet_handler(u_char *param ...

  4. winPcap_5_打开适配器并捕获数据包

    知道如何获取适配器的信息了,那我们就开始一项更具意义的工作,打开适配器并捕获数据包.编写一个程序,将每一个通过适配器的数据包打印出来. 打开设备的函数是 pcap_open(). (Open a ge ...

  5. winPcap_6_不用回调方法捕获数据包

    用 pcap_next_ex() 函数代替 _5_ 中的 pcap_loop()函数: pcap_loop()函数是基于回调的原理来进行数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选 ...

  6. winPcap编程之不用回调方法捕获数据包(五 转)

    这一次要分析的实例程序跟上一讲非常类似(“打开适配器并捕获数据包”),略微不同的一点是本次将pcap_loop()函数替换成了pcap_next_ex()函数.本节的重点也就是说一下这两个函数之间的差 ...

  7. Winpcap笔记4之不用回调函数捕获数据包

    函数1: pcap_next_ex(pcap_t*                       p, struct pcap_pkthdr**   pkt_header, const u_char*  ...

  8. Linux系统捕获数据包流程

    Linux系统捕获数据包流程 为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点.减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能.下面本文将以Linux操作系统为平台,分析捕获数 ...

  9. ARPSpoofing教程(三) - 捕获数据包

    1: #include"pcap.h" 2: //每次捕获到数据包时,libpcap都会自动调用这个回调函数 3: void packet_handler(u_char *para ...

随机推荐

  1. 25.75k8s

    扣子helm上传dm需要在  local下执行  helm repo index helm list --tls  (加上--tls才可以)

  2. [LeetCode] 62. Unique Paths_ Medium tag: Dynamic Programming

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  3. 解决mysql大小写敏感问题

    先在服务中 找到 my.min 文件 在 [mysqld] 下面添加一行: lower_case_table_names = 0 其中 0:区分大小写,1:不区分大小写 设置好后 需要重启服务   然 ...

  4. https学习笔记二----基础密码学知识和python pycrypto库的介绍使用

    在更详细的学习HTTPS之前,我也觉得很有必要学习下HTTPS经常用到的加密编码技术的背景知识.密码学是对报文进行编解码的机制和技巧.可以用来加密数据,比如数据加密常用的AES/ECB/PKCS5Pa ...

  5. for loop

    https://www.cnblogs.com/EasonJim/p/8315939.html

  6. 7.mongo python 库 pymongo的安装

    1.Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,在CMD中使用命令即可[注意此处是pip3,pip无法安装]: pip3 install pymongo 2. ...

  7. LinkedList 利用的是尾插法

  8. Solr全文检索框架

    概述: 什么是Solr? Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务.Solr可以独立运行在Jetty.tomcat.webLogic.webSh ...

  9. nginx 反向代理和正向代理功能 第六章

    一:Nginx作为正向代理服务器: 1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代 ...

  10. WebBench 安装使用

    介绍 WebBench是有名的网站压力测试工具,由Lionbridge公司开发,最多可以模拟3万个并发连接去测试网站的负载能力.. 安装 系统:Linux Centos 7.4 x64 版本:webb ...