捉层使用Scapy的和nfqueue 2包

时间:2019-02-02 12:32:43

标签: python iptables scapy packet-capture netfilter

我想创建分组嗅探器可以修改某些数据包(使用Netfilter的队列和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())可以返回

###[ Ethernet ]### 
  dst= 00:00:00:00:00:00
  src= 00:00:00:00:00:00
  type= 0x86dd
###[ IPv6 ]### 
     ...
###[ UDP ]### 
        ...
###[ Raw ]### 
           ...

是否有可能使用nfqueue赶上(和修改)例如源MAC地址?我尝试使用不同的套接字类型,但没有任何效果。

0 个答案:

没有答案