【问题标题】:Can't extract individual fields from scapy packet无法从 scapy 数据包中提取单个字段
【发布时间】:2016-10-12 16:39:55
【问题描述】:

我一直在尝试使用 scapy 和 Python 3,我想使用 ARP 协议来查找网络上计算机的 mac 地址。这是我的代码:

>>> packet = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=IP_OF_HOST))

然后为了从这个数据包中提取数据,我使用了以下行:

>>> packet[0][Ether].src

但是由于某种原因,这会产生错误:

AttributeError: 'list' object has no attribute 'src'

我阅读的每个教程都使用了我用于提取字段数据的方法,为什么它对我不起作用?

【问题讨论】:

  • 从错误消息看来,packet[0][Ether] 是一个列表。你可以试试print(packet[0][Ether]) 看看里面有什么。

标签: python python-3.x attributes scapy arp


【解决方案1】:

这与函数 srp() 和 srp1() 之间的区别有关(那些用于网络第 2 层,对于第 3 层,您将分别使用 sr() 和 sr1())。

srp() 发送数据包,并保存所有数据包,无论它们是否被应答。要说出源 MAC 地址,我会这样做:

answered_packets, unanswered_packets = packet
for packet_i_sent, packet_i_received in answered_packets:
    print(packet_i_received.src)

srp1() 发送一个数据包,并等待一个答复,并且只保存答复数据包。这意味着格式不同,因为您不必处理未应答的数据包,而我以前的方法可以工作:

print(packet.src)     #The [Ether] part doesn't matter, 
                      #that's just for looking fancier when you print(packet)

所以基本上我使用了命令 srp() 并尝试像使用 srp1() 一样解码回复

【讨论】:

    猜你喜欢
    • 2014-12-26
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2016-10-24
    • 2022-10-04
    • 2019-09-02
    相关资源
    最近更新 更多