使用scapy和nfqueu捕获第2层数据包

2024-06-28 18:55:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建包嗅探器,它可以修改一些包(使用Netfilter Queue和Scapy)。在

首先,我的脚本添加了iptable规则iptables -t raw -A PREROUTING -j NFQUEUE --queue-num 1。在

其次,我使用自定义处理程序创建队列

import netfilterqueue
from scapy.all import *
import socket

def handler(pkt):
    hexdump(pkt.get_payload())
    pkt.accept()

nfqueue = netfilterqueue.NetfilterQueue()
nfqueue.bind(1, handler)

s = socket.fromfd(nfqueue.get_fd(), socket.AF_PACKET, socket.SOCK_RAW)

try:
    nfqueue.run_socket(s)
except KeyboardInterrupt:
    pass

s.close()

nfqueue.unbind()

但我能从pkt.get_payload()得到的只有IP帧(没有以太网帧)。在

我很困惑,因为scapy的sniff()函数可以很容易地捕获以太网数据包。在

例如,sniff(prn=lambda pkt:pkt.show())可以返回

^{pr2}$

是否可以使用nfqueue捕捉(和修改)例如源MAC地址?我试过用不同的插座类型,但都没用。在


Tags: import脚本getqueuesocketscapyhandlerpayload