Scapy:sniff函数剖析(参数分析)

这篇具有很好参考价值的文章主要介绍了Scapy:sniff函数剖析(参数分析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

sniff函数是Scapy中的探嗅函数,定义在sendrecv模块中。下面将给出sniff函数的具体剖析。

官方没有给出sniff文档,下面给出源码:

@conf.commands.register
def sniff(*args, **kwargs):
    # type: (*Any, **Any) -> PacketList
    sniffer = AsyncSniffer()
    sniffer._run(*args, **kwargs)
    return cast(PacketList, sniffer.results)

看来重点应该放在AsyncSniffer上。

源码太长,就节选调用的_run方法的函数头(_run方法本身也有207行)

def _run(self,
             count=0,  # type: int
             store=True,  # type: bool
             offline=None,  # type: Any
             quiet=False,  # type: bool
             prn=None,  # type: Optional[Callable[[Packet], Any]]
             lfilter=None,  # type: Optional[Callable[[Packet], bool]]
             L2socket=None,  # type: Optional[Type[SuperSocket]]
             timeout=None,  # type: Optional[int]
             opened_socket=None,  # type: Optional[SuperSocket]
             stop_filter=None,  # type: Optional[Callable[[Packet], bool]]
             iface=None,  # type: Optional[_GlobInterfaceType]
             started_callback=None,  # type: Optional[Callable[[], Any]]
             session=None,  # type: Optional[_GlobSessionType]
             session_kwargs={},  # type: Dict[str, Any]
             **karg  # type: Any
             )

参数解析:

count:

        类型为int,默认值为0。抓包的个数,0为无限。详见timeout的参数解析。

 文章来源地址https://www.toymoban.com/news/detail-415286.html

store:

         类型为bool,默认值为True。是否存储抓到的包。当该参数为真时,返回一个储存着抓获包的PackeList对象。反之则PackeList为空。

 

offline:

        无指定类型,默认值为None。从pcap文件读取数据,而不进行探嗅。

 

quiet:

        类型为bool,默认值为False。

 

prn:

        类型为funtion,默认值为None。传入一个任意类型的返回值的回调函数,即作为参数传入并调用的函数。一般是lambda函数。

        值得注意的是,当且仅当prn的返回值为None时,sniff不会打印它,其余情况sniff都会把它打印到显示器上。正因如此,如果想一边抓包一边打印包的梗概,那么可以传入lambda packet:packet.summary();如果想使用ls函数列出所抓版的详情,直接传入ls函数即可。

 

filter:

        类型为str,默认值为None。BPF过滤规则。

        BPF:柏克莱封包过滤器(Berkeley Packet Filter,缩写BPF),是类Unix系统上数据链路层的一种原始接口,提供原始链路层封包的收发。

        如仅需要TCP包,可以向filter参数传入'tcp'来滤包。这样返回的PacketList中就全都是TCP包了。

 

lfilter:

        类型为function,默认值为None。传入一个返回值为bool型的回调函数,一般为lambda函数。会把每一个捕获到的包放入这个函数,当返回值为真时,才会放入返回的PacketList。

        这个参数与filter参数不同,前者放入的是字符串,后者放入的是函数,切记不可弄混。

 

L2socket:

        类型为SuperSocket,默认值为None。特定的L2socket。L2socket,即Layer 2 socket。是在网络第二层(链路层)工作的套接字。

 

timeout:

        类型为int或float, 默认值为None。设置抓包的超时时间。

        当未传入timeout且未传入count时,会循环抓包直至程序关闭或按下Ctrl+C键阻断程序。当未传入timeout且传入count时,会一直抓包直到满足count的值,当传入timtout且未传入count时,会抓包timeout秒,不限所抓包的数量。当传入timeout和count时,当任意一方满足条件,sniff就会停止抓包。

 

opened_socket:

        类型为socket,默认值为None。对指定socket对象调用recv方法抓包,而不会抓其他的包。

 

stop_filter:

        类型为funcion,默认值为None。传入一个返回值为bool的函数,一般为lambda函数。

        会将每一个抓获的包放入这个函数,当返回值为True时,停止抓包。

        这可以看做是sniff的中断函数。

 

iface:

        类型为str,默认值为None。传入指定抓包所用网卡的名称,sniff会搞定一切。缺省时会使用所有网卡。

        例如,传入'eth0',sniff就会使用eth0这张网卡抓包。

started_callback:

        类型为function,默认值为None。sniff在开始运行是会调用的回调函数。

        callback即回调函数。

        

session:

        类型为_GlobSessionType,默认值为TCPSession。流处理器。

 

session_kwargs:

        类型为dict,默认值为None。传递给session的参数。

参考文献:

Python Scapy-sniff函数_冰息的博客-CSDN博客_python sniff

Scapy之sniff抓包 - CH3UHX9 - 博客园

 

 

 

 

 

到了这里,关于Scapy:sniff函数剖析(参数分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】STL 算法 - for_each 遍历算法 ( for_each 函数原型 | for_each 函数源码分析 | for_each 函数 _Fn _Func 参数 值传递说明 )

    在 C++ 语言 的 标准模板库 ( STL , Standard Template Library ) 中 , 提供了 for_each 算法 用于 对一个 STL 容器中的每个元素执行某个指定的 \\\" 操作 \\\" ; for_each 算法 中 执行的 \\\" 操作 \\\" 可以是一个 函数 / 函数对象 / Lambda 表达式 ; 在 for_each 函数 中 可以修改 被遍历的元素 , 也可以 不修改

    2024年01月17日
    浏览(41)
  • 对dubbo的DubboReference.check的参数进行剖析

    在使用dubbo的时候,发现当消费者启动的时候,如果提供者没有启动,即使提供者后来启动了,消费者也调不通提供者提供的接口了。 注册中心使用都是nacos dubbo版本是3.0.4 接口 提供者 消费者 1. 先启动provider,再启动consumer a. 启动provider nacos出现provider的服务 b. 启动consumer

    2023年04月23日
    浏览(28)
  • C生万物 | 剖析函数指针经典应用 —— 回调函数

    不懂函数指针的老铁可以先看看这篇文章【指针函数与函数指针】,上车,准备出发🚗 回调函数就是一个通过【函数指针】调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数

    2024年02月04日
    浏览(51)
  • HttpGet请求与Post请求中参数乱码原因剖析与解决方案

    1 Get请求 当向服务器发送请求URL的请求时 :localhost:8080/getinfo?username=张三,通常在服务端中解析username的参数值时会获得一串难以解读的字符信息。 1.1 原因解析 Get请求中的请求参数会拼接在请求URL中,当URL中存在中文时,浏览器会对请求URL进行编码,其中编码的时候使用的

    2024年02月13日
    浏览(40)
  • 剖析C语言字符串函数

    目录 前言: 一、strlen函数 功能: 参数和返回值: 注意事项: 返回值是无符号的易错点: strlen函数的模拟实现 1、计数器算法 2、递归算法 3、指针减去指针 二、strcpy函数 功能: 参数和返回值 注意事项: strncpy函数 strcpy函数的模拟实现 三、strcat函数  功能: 参数和返回值

    2024年02月16日
    浏览(32)
  • 【C】剖析C语言内存函数

    上一篇文章详细介绍了字符串函数,那字符串函数和内存函数到底有什么区别呢? 最根本的区别在于,他们操作的对象不同,视角不同。 字符串函数针对的是一个个的字符,而内存函数顾名思义关注的是内存,存储在内存中的一个个字节。 功能: 复制内存块,可以将 任意

    2024年02月16日
    浏览(29)
  • JavaScript 深度剖析-函数式编程(一)

    为什么要学习函数编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编程的应用场景 函数式编程库 Lodash 函数式编程是非常古老的一个概念,早于第一台计算机的诞生,函数式编程的历史。 那我们为什么现在还要学函数式编程? 函数式编程

    2024年02月15日
    浏览(47)
  • 你真的理解qsort函数吗?带你深度剖析qsort函数

    魔王的介绍:😶‍🌫️一名双非本科大一小白。 魔王的目标:🤯努力赶上周围卷王的脚步。 魔王的主页:🔥大魔王不哭 我们初识C语言时,会做过让一个整型数组按照从小到大来排序的问题,我们使用的是冒泡排序法,但是如果我们想要比较其他类型怎么办呢,显然我们

    2023年04月24日
    浏览(41)
  • 【C语言】剖析qsort函数的实现原理

    主页:17_Kevin-CSDN博客 专栏:《C语言》 本文将从回调函数,qsort函数的应用,qsort函数的实现原理三个方面进行讲解,请自行跳转至相对位置进行阅读~  目录 回调函数 qsort函数的应用 qsort函数实现原理 回调函数实际上是一个指针,指向的是一个函数。它作为一个参数传递给

    2024年03月14日
    浏览(35)
  • 多态 虚函数表深度剖析 纯干货讲解(2)

    💯 博客内容:多态 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准C++后端工程师,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘 目录 虚函数存在哪里?  虚函数的地

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包