python-3.x - Netfilterqueue,set_payload 不使用 python3 更改数据包
问题描述
我正在尝试使用 NetfilterQueue(版本 0.8.1)和 Python3(版本 3.7.3)更改 UDP 数据包中的 raw.load。Scapy版本。是 2.4.4
目标服务器运行 tcpdump 来嗅探传入的数据包,但没有任何东西到达。
我的脚本可以毫无问题地从 nfqueue 捕获数据包。我用新文本更改 [Raw].load 并用 set_payload 设置但没有结果。
from netfilterqueue import NetfilterQueue
from scapy.all import *
import binascii
def print_and_accept(pkt):
pkt_scapy = scapy.all.IP(pkt.get_payload())
pkt_scapy[scapy.all.Raw].load="new text goes here"
del pkt_scapy[scapy.all.IP].len
del pkt_scapy[scapy.all.UDP].chksum
del pkt_scapy[scapy.all.IP].chksum
pkt.set_payload(bytes(pkt_scapy))
pkt.accept()
nfqueue = NetfilterQueue()
nfqueue.bind(1, print_and_accept)
try:
nfqueue.run()
except KeyboardInterrupt:
print('')
nfqueue.unbind()
解决方案
我有同样的问题,似乎 netfilterqueue 有点过时了。对于您的情况,我建议您默认丢弃数据包,而不是 packet.accept() 使用 scapy 的 send() 函数:
def print_and_accept(pkt):
pkt_scapy = scapy.all.IP(pkt.get_payload())
pkt_scapy[scapy.all.Raw].load="new text goes here"
del pkt_scapy[scapy.all.IP].len
del pkt_scapy[scapy.all.UDP].chksum
del pkt_scapy[scapy.all.IP].chksum
pkt.drop()
send(pkt_scapy)
推荐阅读
- spring-batch - 从 Spring 批处理分区工作步骤存储作业级别数据的最佳方法是什么?
- scala - 是什么导致该类型与 Scala 中的基础类型不匹配
- macos - 是什么导致 SwiftUI 的 Picker 在 macOS 上吞星?
- react-native - React Naitve i18n ,如何翻译 useState() 的内容?
- python - 无法使用 redshift-connector 让 sql 可靠地执行
- http - 开发工具 - Elasticsearch Uri 的 HTTP 方法不正确
- r - 在 R 中的 ifelse 中使用合并
- sql - PostgreSQL:使用 lag() 有效更新表
- javascript - 如何使用商店 redux 更新本机反应组件
- database - 图数据库节点和边随时间变化