如何利用Python嗅探(Sniffer)数据包

使用Sniffer截获流经本机网卡的IP数据包 Win2K下的Sniffer工具源代码 详细信息   Win2K下的Sniffer源代码。[代码性质] VC完整应用程序代码[代码作者] zw[文件大小] 130K [更新日期] 2002-11-26 19:47:00 [下载次数] 6015  http://www.vckbase.com/code/downcode.asp?id=1692IP包监听程序(For 9x)源代码 详细信息 阅读详情

一提到Python获取数据包的方式,相信很多Python爱好者会利用Linux的libpcap软件包或利用Windows下的WinPcap可移植版的方式进行抓取数据包,然后再利用dpkt软件包进行协议分析,我们这里想换一个角度去思考:

    1. Python版本的pcap存储内存数据过小,也就是说缓存不够,在高并发下容易发生丢包现象,其实C版本的也同样存在这样的问题,只不过Python版本的缓存实在是过低,让人很郁闷。

    2. dpkt协议分析并非必须,如果你对RFC 791和RFC 793等协议熟悉的话,完全可以使用struct.unpack的方式进行分析。

    如果你平常习惯使用tcpdump抓取数据包的话,完全可以使用它来代替pcap软件包,只不过我们需要利用tcpdump将抓取的数据以pcap格式进行保存,说道这里大家一定会想到Wireshark工具,具体命令如下:

1. tcpdump dst 10.13.202.116 and tcp dst port 80 -s 0 -i eth1 -w ../pcap/tcpdump.pcap -C 1k -W 5

    我们首先需要对pcap文件格式有所了解,具体信息大家可以参考其他资料文档,我这里只说其重要的结构体组成,如下:

1. sturct pcap_file_header

2. {

3.     DWORD   magic;

4.     WORD    version_major;

5.     WORD    version_minor;

6.     DWORD   thiszone;

7.     DWORD   sigfigs;

8.     DWORD   snaplen;

9.     DWORD   linktype;

10. }

11. 

12. struct pcap_pkthdr

13. {

14.     struct timeval  ts;

15.     DWORD           caplen;

16.     DWORD           len;

17. }

18. 

19. struct timeval

20. {

21.     DWORD   GMTtime;

22.     DWORD   microTime;

23. }

    这里需要说明的一点是,因为在Python的世界里一切都是对象,所以往往Python在处理数据包的时候感觉让人比较麻烦。

    至于对于如何监控tcpdump生成的pcap文件数据,大家可以通过pyinotify软件包来实现(相信大家一定对于rsync+inotify的组合比较熟悉),如下:

1. class Packer(pyinotify.ProcessEvent):

2.     def __init__(self, product):

3.         self.product = product

4.         self.process = None

5. 

6.     def process_IN_CREATE(self, event):

7.         logger.debug("create file: %s in queue" % self.process_IF_START_THREAD(event))

8. 

9.     def process_IN_MODIFY(self, event):

10.         self.process_IF_START_THREAD(event)

11.         logger.debug("modify file: %s in queue" % self.process_IF_START_THREAD(event))

12. 

13.     def process_IN_DELETE(self, event):

14.         filename = os.path.join(event.path, event.name)

15.         logger.debug("delete file: %s" % filename)

16. 

17.     def process_IF_START_THREAD(self, event):

18.         filename = os.path.join(event.path, event.name)

19. 

20.         if filename != self.process:

21.             self.process = filename

22.             self.product.put(filename)

23. 

24.             if self.product.qsize() > 1:

25.                 try:

26.                     logger.debug("create consumer product.qsize: %s" % self.product.qsize())

27.                     consumer = Consumer(self.product)

28.                     consumer.start()

29.                 except Exception, errmsg:

30.                     logger.error("create consumer failed: %s" % errmsg)

31. 

32.         return filename

33. 

34. class Factory(object):

35.     def __init__(self, product):

36.         self.product = product

37.         self.manager = pyinotify.WatchManager()

38.         self.mask = pyinotify.IN_CREATE | pyinotify.IN_DELETE | pyinotify.IN_MODIFY

39. 

40.     def work(self):

41.         try:

42.             try:

43.                 notifier = pyinotify.ThreadedNotifier(self.manager, Packer(self.product))

44.                 notifier.start()

45.                 self.manager.add_watch("../pcap", self.mask, rec = True)

46.                 notifier.join()

47.             except Exception, errmsg:

48.                 logger.error("create notifier failed: %s" % errmsg)

49.         except KeyboardInterrupt, errmsg:

50.             logger.error("factory has been terminated: %s" % errmsg)

    在获得要分析的pcap文件数据之后,就要对其分析了,只要你足够了解pcap文件格式就可以了,对于我们来讲只需要获得TCP数据段的数据即可,如下:

1. class Writer(threading.Thread):

2.     def __init__(self, product, stack):

3.         threading.Thread.__init__(self)

4.         self.product = product

5.         self.stack = stack

6.  

7.         self.pcap_pkthdr = {} 

8. 

9.     def run(self):

10.         while True:

11.             filename = self.product.get()

12.             try:

13.                 f = open(filename, "rb")

14.                 readlines = f.read()

15.                 f.close()

16.                 offset = 24

17.                 while len(readlines) > offset:

18.                     self.pcap_pkthdr["len"] = readlines[offset+12:offset+16]

19.                     try:

20.                         length = struct.unpack("I", self.pcap_pkthdr["len"])[0]

21.                         self.stack.put(readlines[offset+16:offset+16+length])

22.                         offset += length + 16

23.                     except Exception, errmsg:

24.                         logger.error("unpack pcap_pkthdr failed: %s" % errmsg)

25.             except IOError, errmsg:

26.                 logger.error("open file failed: %s" % errmsg)

    在获得TCP数据段的数据包之后,问题就简单多了,根据大家的具体需求就可以进行相应的分析了,我这里是想分析其HTTP协议数据,同样也借助了dpkt软件包进行分析,如下:

1. def worker(memcache, packet, local_address, remote_address):

2.     try:

3.         p = dpkt.ethernet.Ethernet(packet)

4.         if p.data.__class__.__name__ == "IP":

5.             srcip = "%d.%d.%d.%d" % tuple(map(ord, list(p.data.src)))

6.             dstip = "%d.%d.%d.%d" % tuple(map(ord, list(p.data.dst)))

7.             if p.data.data.__class__.__name__ == "TCP":

8.                 tcpacket = p.data.data

9.                 if tcpacket.dport == 80 and dstip == local_address:

10.                     srcport = tcpacket.sport

11.                     key = srcip + ":" + str(srcport)

12.                     if tcpacket.data:

13.                         if not memcache.has_key(key):

14.                             memcache[key] = {}

15. 

16.                         if not memcache[key].has_key("response"):

17.                             memcache[key]["response"] = None

18. 

19.                         if memcache[key].has_key("data"):

20.                             memcache[key]["data"] += tcpacket.data

21.                         else:

22.                             memcache[key]["data"] = tcpacket.data

23.                     else:

24.                         if memcache.has_key(key):

25.                             memcache[key]["response"] = dpkt.http.Request(memcache[key]["data"])

26.                             try:

27.                                 stackless.tasklet(connection)(memcache[key]["response"], local_address, remote_address)

28.                                 stackless.run()

29.                             except Exception, errmsg:

30.                                 logger.error("connect remote remote_address failed: %s", errmsg)

31.                             logger.debug("old headers(none content-length): %s", memcache[key]["response"])

32.                             memcache.pop(key)

33.     except Exception, errmsg:

34.         logger.error("dpkt.ethernet.Ethernet failed in worker: %s", errmsg)

    如果大家只是想单纯的获取IP地址、端口、流量信息,那么问题就更简单了,这里只是抛砖引玉。


摘自  放飞翅膀,追求梦想

手把手教你用nRF52840 Dongle和Wireshark抓包分析蓝牙BLE设备(保姆级图文教程) 本文详细介绍了如何使用nRF52840 Dongle和Wireshark构建蓝牙BLE嗅探器,包括硬件准备、固件烧录、Wireshark插件配置及实战抓包分析。通过保姆级图文教程,帮助开发者低成本实现蓝牙协议分析,特别针对Windows平台下的常见问题提供了解决方案。 阅读详情

相关推荐

用Python获取本机网卡IP数据包

这几天用到了raw socket,用python写了些demo程序,这里记录下,也方便我以后查阅。 首先我们看一个简单的sniffer程序: #! /usr/bin/python # code for linux import socket #s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP

tycoon的专栏 2508

python//网络嗅探器

python编写网络嗅探器 网络嗅探器 网络嗅探器又称网络监听器,简称Sniffer子系统,放置于网络节点上,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用信息的方法。 嗅探器原理 原理上来说,在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就接收...

manchenyg的博客 7887

python-sniffer:python中简单数据包嗅探器的简单实现

Python嗅探器 在 python 中简单的数据包嗅探器的简单实现。 适用于 Windows 和 Linux(可能还有其他 POSIX 系统,但未经测试)。

python scapy中sniffer的用法以及过滤器

Sniff方法定义: sniff(filter="",iface="any", prn=function, count=N) 1、filter的规则使用 Berkeley Packet Filter (BPF)语法,具体参考:http://blog.youkuaiyun.com/qwertyupoiuytr/article/details/54670477 2、iface用来指定要在哪个网络接口上进行抓...

weixin_30897233的博客 3634

Lumerical FDTD新手必看:从零开始搭建光子晶体仿真环境(附完整脚本)

本文为Lumerical FDTD新手提供光子晶体仿真环境的完整搭建指南,涵盖从基础参数设置到脚本编写的全流程。通过典型光子晶体带隙分析案例,详细讲解结构建模、仿真参数配置及后处理技巧,并附赠完整MATLAB脚本,帮助用户快速掌握FDTD仿真核心技术。

3c4x5z6v7b的博客 1052

H5获取手机相机或相册图片两种方式-Android通过webview传递多张照片给H5

H5调用公共获取图片文件方法,在android手机端,H5主要依赖Webview,这边在webview声明并重写该方法onShowFileChooser使用工具类打开相机或相册,可以两种方式安卓原生方式或者利用第三方组件库方式选中图片,返回uri列表给H5H5收到uri照片列表,并且使用前端方式展示创造价值,乐哉分享!

m0_74823947的博客 3096

python局域网嗅探_Python_sniffer(网络嗅探器)

import socketimport threadingimport timeactiveDegree=dict()flag=1def main():global activeDegreeglobal glag#获取本机IP地址HOST=socket.gethostbyname(socket.gethostbyname())#创建原始套接字,适用于Windows平台#对于其他系统,要把socke...

weixin_39609670的博客 1825

线阵相机标定必看:如何用Halcon实现亚毫米级精度测量(以HC050标定板为例)

本文以HC050标定板为例,详细阐述了如何利用Halcon实现线阵相机的高精度标定,以达到亚毫米级测量。文章深入剖析了线阵相机标定的核心原理、面临的独特挑战,并提供了从硬件搭建、图像采集到Halcon软件实操的完整路径,重点解析了运动参数设置、精度验证及常见问题排错,为精密测量应用提供系统解决方案。

weixin_29213655的博客 313

把闲置的nRF52840开发板变成低成本蓝牙嗅探器:一份给硬件爱好者的完整改造清单

本文详细介绍了如何将闲置的nRF52840开发板改造为低成本蓝牙嗅探器,涵盖硬件选择、天线改造、软件配置及Wireshark集成等关键步骤。通过这份完整指南,硬件爱好者可以充分利用nRF52840的强大性能,实现高效的BLE数据包捕获与分析,大幅降低蓝牙协议分析的成本门槛。

weixin_30383279的博客 344

LabVIEW 调用MATLAB 进行图像处理的实现

程机械及设备的变形、振动、冲击、粗糙度、刚度和强度等特性,还可用在土木结构、水利设施的变形测量[4][5]。因此,该技术在机械、土木、水利、电器、航空航天、兵器工业及生物医学等领域的检测中具有非常重要的地位。将物面前方空间的散斑用摄像设备记录下来,当物体运动或由于受力而变形时,这些随机分布的散斑图也随之在空间按一定的规律运动,因此能用记录的散斑图在计算机上分析物体的运动和变形,这就是电子散斑技术。当物体的漫反射表面被激光照射时,漫反射的光波在物体表面的前方相互干涉,由于漫反射光的。

qq_37971227的博客 3873

【AMD | Docker】超级全面版本:在Docker中验证AMD GPU移动显卡可用性的方法

1. 安装ROCm Docker支持 ■AMD GPU驱动 ■ROCM ■Docker 2. 配置Docker使用ROCm 3. 使用官方ROCm Docker镜像 4. 使用Docker CLI参数访问GPU

静谧、淡雅 684

探索Sniffer:一款强大的网络数据包嗅探工具

探索Sniffer:一款强大的网络数据包嗅探工具 项目地址:https://gitcode.com/gh_mirrors/sniffer2/sniffer 项目简介 是一个轻量级且高效的网络数据包捕获和分析工具,基于Python语言开发。它允许用户在本地网络环境中监听并解析数据包,从而获取网络流量的详细信息。对于网络管理员、开发者和安全研究人员而言,这是一个极其宝贵的资源,能够帮助他们更好地理解和...

gitblog_00065的博客 1011

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

图像可以被视为标量场(即二维函数)。通过微分将标量场转换为矢量场。梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最快的方向。因为梯度有方向和大小,所以将这些信息编码为向量是很自然的。该向量的长度提供了梯度的大小,而其方向提供了梯度方向。因为梯度在每个位置可能不同,所以我们在每个图像位置用不同的向量来表示它。

学以致用 知行合一 3202

Python 3 Network Packet Sniffer:终极网络嗅探工具入门指南

Python 3 Network Packet Sniffer 是一款强大的网络嗅探工具,能够捕获并解析网络接口上的数据包,为网络分析和故障排查提供关键支持。本文将为你提供一个简单快速的入门指南,帮助你轻松掌握这款工具的使用方法。 ## 什么是网络嗅探工具? 网络嗅探工具是一种能够捕获和分析网络中传输数据包的软件。它可以帮助网络管理员监控网络流量、诊断网络问题、检测网络攻击等。Python 3

gitblog_00278的博客 446

VXWorks6.9 + Workbench3.3 开发环境部署

VxWorks6.9 + Workbench3.3的安装部署,以及简单示例项目的创建、编译和运行

Mr.Sugarcane 5463

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上)

网络嗅探,是监听流经本机网卡数据包的一种技术,嗅探器就是利用这种技术进行数据捕获和分析的软件。 编写嗅探器,捕获数据是前置功能,数据分析要建立在捕获的基础上。本节就数据捕获的基本原理和编程实现做详细的阐述。

玄魂工作室 7913

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python 3 Network Packet Sniffer开发指南:从源码到二进制文件的构建之路

想要快速掌握网络数据包嗅探工具的开发与部署吗?这篇完整的Python 3 Network Packet Sniffer开发指南将带你从零开始,了解如何构建专业的网络嗅探工具,并最终打包成独立的可执行文件。无论你是网络安全爱好者、网络管理员还是Python开发者,这篇教程都将为你提供实用的技能和方法。😊 ## 📋 项目概览与核心功能 Python 3 Network Packet Sniff

gitblog_00762的博客 1077

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python嗅探程序_Python_sniffer(网络嗅探器),sniffer使用教程,import soc

Python_sniffer(网络嗅探器),sniffer使用教程,import socimport socketimport threadingimport timeactiveDegree=dict()flag=1def main(): global activeDegree global glag #获取本机IP地址 HOST=socket.gethostbyname...

weixin_39532628的博客 993

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

wireshark 抓 蓝牙数据_利用nRF Sniffer对蓝牙BLE通信数据进行嗅探和分析

*本文作者:barcating,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。前言本文主要介绍 Nordic 的nRF51 Dongle (PCA10031)工具的安装和配置,以及使用该工具配合Wireshark软件,针对蓝牙BLE通信数据进行抓包合协议分析。文中使用的硬件如图所示。一、软件安装(1)下载nRF Sniffer software v2.x 或者更高的版本,可以在Nordi...

weixin_39857211的博客 3508

如何快速搭建Python 3 Network Packet Sniffer:5分钟上手教程

Python 3 Network Packet Sniffer是一款用Python 3开发的网络数据包嗅探工具,能够在数据包到达指定网络接口控制器时对其进行解析,并在屏幕上显示相关信息。这款工具完全依赖于NETProtocols库(版本2.0.0及以上),可在任何Python 3.8+解释器上运行,是网络分析和学习的实用工具。 ## 🚀 准备工作:环境与依赖 在开始搭建之前,确保你的系统满足

gitblog_00871的博客 995

python scapy sniffer停止抓包_Python在特定条件下停止嗅探

如果目标是在从特定IP接收特定数据包时停止sniff,则正确的方法是将stop_filter传递给sniff函数,如下面复制的文档中所指定。>>> print sniff.__doc__Sniff packetssniff([count=0,] [prn=None,] [store=1,] [offline=None,] [lfilter=None,] + L2ListenSoc...

weixin_34315264的博客 3252

探秘Sniffer-Agent:网络数据嗅探与分析的利器

探秘Sniffer-Agent:网络数据嗅探与分析的利器 在数字化的时代,网络数据的采集和分析变得日益重要,无论是为了网络安全监控、性能优化还是应用调试。今天,我们要向您推荐一个名为Sniffer-Agent的开源项目,它是一个强大的网络数据包嗅探工具,可以帮助开发者和IT专业人士更轻松地获取和解析网络流量。 项目简介 Sniffer-Agent是由@zr-hebo开发的一个基于Python的网...

gitblog_00063的博客 441

python嗅探器,Python中的数据包嗅探器

I want to do a packet sniffer in Python 3.5 which captures UDP, TCP and ICMP. This is a short example of it:import socketimport struct# the public network interfaceHOST = socket.gethostbyname(socket.g...

weixin_30624767的博客 213

Vita Moonlight网络调试终极指南:使用WOL嗅探工具验证唤醒包

想要在PlayStation Vita上流畅使用Vita Moonlight进行游戏串流,网络调试是关键环节!特别是Wake-on-LAN(WOL)网络唤醒功能,能让您直接从Vita唤醒远程PC开始游戏串流。本文将为您详细介绍如何使用内置的WOL嗅探工具验证唤醒包,确保网络唤醒功能正常工作。😊 ## 为什么需要WOL网络调试? Vita Moonlight作为PlayStation Vita

gitblog_00005的博客 1005

Python 3 Network Packet Sniffer实战案例:如何捕获并分析网络流量

想要深入了解网络通信的秘密吗?Python 3网络数据包嗅探器就是你的终极网络分析工具!这个强大的嗅探工具能够实时捕获和分析网络流量,帮助开发者和网络安全爱好者深入了解数据包传输的每一个细节。无论你是网络工程师、安全研究员还是Python开发者,掌握网络数据包嗅探技术都将为你打开一扇通往网络世界深处的大门。 ## 📊 什么是网络数据包嗅探器? 网络数据包嗅探器是一种特殊的网络分析工具,它能够

gitblog_00209的博客 344
上一篇: 渗透测试]python内网渗透信息收集脚本
下一篇: 浏览器支持data URI协议
whackw
博客等级 码龄16年 203粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值