使用Python实现windows下的抓包与解析

 更新时间:2018年01月15日 12:08:02   作者:风行小天 关注  
这篇文章主要介绍了使用Python实现windows下的抓包与解析,非常不错,具有参考借鉴价值,需要的朋友可以参考下

系统环境:windows7,选择windows系统是因为我对自己平时日常机器上的流量比较感兴趣

python环境:python2.7 ,这里不选择python3的原因,是因为接下来要用到的scapy包在python3中安装较于python2要麻烦得多。如果你习惯于用python3,数据包的分析完全可以放在3下面做,因为抓包和分析是两个完全独立的过程。

需要的python包:scapy和dpkt

抓包代码:

from scapy.sendrecv import sniff
from scapy.utils import wrpcap
dpkt = sniff(count = 100)  #这里是针对单网卡的机子,多网卡的可以在参数中指定网卡
wrpcap("demo.pcap", dpkt)

你没看错,仅仅只需要两行代码就可以实现一个简单的抓包功能。sniff函数负责嗅探数据包,而wrpcap函数将抓取到的数据包保存起来。

数据包的分析:

import dpkt
import socket
import datetime
def printPcap(pcap):
try:
for timestamp, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf) #获得以太包,即数据链路层包
print("ip layer:"+eth.data.__class__.__name__) #以太包的数据既是网络层包
print("tcp layer:"+eth.data.data.__class__.__name__) #网络层包的数据既是传输层包
print("http layer:" + eth.data.data.data.__class__.__name__) #传输层包的数据既是应用层包
print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取时间
if not isinstance(eth.data, dpkt.ip.IP):
print('Non IP Packet type not supported %s' % eth.data.__class__.__name__)
continue
ip = eth.data
do_not_fragment =bool(ip.off & dpkt.ip.IP_DF)
more_fragments =bool(ip.off & dpkt.ip.IP_MF)
fragment_offset = ip.off & dpkt.ip.IP_OFFMASK
print('IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)' % (socket.inet_ntoa(ip.src), socket.inet_ntoa(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments,fragment_offset))
except:
pass
def main():
f =open('demo.pcap','rb')
pcap = dpkt.pcap.Reader(f)
printPcap(pcap)
if __name__ =='__main__':
main()

结果显示:

这是我打开360的路由器卫士时抓取的数据包。这个软件在打开时与路由器通信,获得连接路由器的电脑和手机的列表。192.168.1.100是我的机器,192.168.1.1是路由器地址,其中可以看到windows发送的数据包的ttl值默认是128,其他的系统默认是64,与我们的理论常识是相符的。

TCP/IP五层分层的结构和封包过程,附图二张:

总结

以上所述是小编给大家介绍的使用Python实现windows下的抓包与解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Python自动抢红包教程详解

    Python自动抢红包教程详解

    在本篇文章里小编给大家整理了关于Python自动抢红包的相关知识点内容,有兴趣的朋友们参考学习下。
    2019-06-06
  • Python利用FFT进行简单滤波的实现

    Python利用FFT进行简单滤波的实现

    今天小编就为大家分享一篇Python利用FFT进行简单滤波的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python解决js文件utf-8编码乱码问题(推荐)

    python解决js文件utf-8编码乱码问题(推荐)

    这篇文章主要介绍了python解决js文件utf-8编码乱码问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • python abs函数用法小结

    python abs函数用法小结

    abs()是python的内置函数,它的作用是返回一个数的绝对值,abs函数的主要用途是返回一个数的绝对值,下面通过本文给大家分享python abs函数怎么用,感兴趣的朋友一起看看吧
    2024-05-05
  • Python中字符串列表的相互转换实际应用场景

    Python中字符串列表的相互转换实际应用场景

    在Python编程中,经常会遇到需要将字符串列表相互转换的情况,这涉及到将逗号分隔的字符串转换为列表,或者将列表中的元素连接成一个字符串,本文将深入讨论这些情景,并提供丰富的示例代码,帮助读者更全面地理解字符串列表的转换操作
    2023-12-12
  • Python实现解析ini配置文件的示例详解

    Python实现解析ini配置文件的示例详解

    在开发过程中,配置文件是少不了的,而且配置文件是有专门的格式的,比如:ini, yaml, toml 等等。而对于 Python 而言,也都有相应的库来解析相应格式的文件,下面我们来看看 ini 文件要如何解析
    2022-09-09
  • python 画出使用分类器得到的决策边界

    python 画出使用分类器得到的决策边界

    这篇文章主要介绍了python 画出使用分类器得到的决策边界,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python用10行代码实现对黄色图片的检测功能

    python用10行代码实现对黄色图片的检测功能

    这篇文章主要介绍了python用10行代码实现对黄色图片的检测功能,涉及Python基于图片库PIL对图片的检测技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • Python中使用gflags实例及原理解析

    Python中使用gflags实例及原理解析

    这篇文章主要介绍了Python中使用gflags实例及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python Django框架实现应用添加logging日志操作示例

    Python Django框架实现应用添加logging日志操作示例

    这篇文章主要介绍了Python Django框架实现应用添加logging日志操作,结合实例形式分析了Django框架中添加Python内建日志模块相关操作技巧,需要的朋友可以参考下
    2019-05-05

最新评论