sr() 和 sr1() 以及它们之间的区别

问题描述 投票:0回答:1

有人知道这两种方法有什么区别吗? 他们都发送一个数据包,并从发送数据包的 IP 获取答案。

另外,我不太明白这些参数的含义: promisc、iface、nofilter

提前致谢。

scapy
1个回答
0
投票

在 Python Scapy 库的上下文中,

sr()
sr1()
都是用于发送和接收网络数据包的函数,通常用于网络侦察、数据包制作和分析。它们之间的主要区别在于它们如何处理响应和返回值。

  1. sr()
    (发送和接收):
    • sr()
      用于发送数据包和接收响应。
    • 它发送一个数据包并等待响应,并返回一个包含两个列表的列表:一个包含发送的数据包,另一个包含接收的数据包。
    • 当您想要发送数据包并捕获多个响应时(例如在网络扫描期间),通常会使用此功能。

示例:

answered, unanswered = sr(IP(dst="192.168.1.1")/ICMP())

在此示例中,它将 ICMP 数据包发送到 IP 地址 192.168.1.1 并捕获已应答和未应答的数据包。

  1. sr1()
    (发送和接收一个):
    • sr1()
      用于发送数据包并接收单个响应。
    • 它发送一个数据包并等待单个响应,然后返回收到的第一个响应数据包。
    • 当您只期望一个响应并且想要直接访问该响应时,通常会使用此功能。

示例:

response = sr1(IP(dst="192.168.1.1")/ICMP())

在此示例中,它向 IP 地址 192.168.1.1 发送 ICMP 数据包并捕获第一个响应数据包。

总而言之,主要区别在于

sr()
返回发送和接收的数据包列表,而
sr1()
返回第一个接收到的数据包。它们之间的选择取决于您的具体用例以及您是否对多个响应或仅一个响应感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.