python - 使用 scapy 向数据包添加填充
问题描述
如何将零注入 UDP 段标头的末尾以使其等于 20 个字节。谁能帮我?
这是我的代码:
if UDP in packet:
"""get layers after udp"""
layer_after = packet[UDP].payload.copy()
"""build a padding layer"""
pad = Padding()
pad.load = '\x00' * 12
layer_before = packet.copy()
layer_before[UDP].remove_payload()
packet = layer_before / pad / layer_after
这是 udp 数据包的输出:
before : b'\xb8\xaco6\x1c\xa2\xe8\xe72<eP\x08\x00E\x00\x00.\x0bT@\x00\xec\x11\x18~MH\xa9\x82\x83\xca\xf0W+iC8\x00\x1a\x85+H\x00Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
--------------------------------------------------------------
after : b'\xb8\xaco6\x1c\xa2\xe8\xe72<eP\x08\x00E\x00\x00.\x0bT@\x00\xec\x11\x18~MH\xa9\x82\x83\xca\xf0W+iC8\x00\x1a\x85+H\x00Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
但它在数据包的末尾添加了零!!!!!!
解决方案
我和你有同样的问题。也许你可以试试这个:
if UDP in packet:
layer_after = packet[UDP].payload.copy()
pad = Padding()
pad.load = '\x00' * 12
layer_before = packet.copy()
layer_before[UDP].remove_payload()
packet = layer_before / raw(pad) / layer_after
填充将跟在 UDP 段标头的末尾。我希望这会对您有所帮助。
推荐阅读
- c - 如何在删除之前返回值?
- python - 在 for 循环中使用 continue 时出现 Numba“使用不支持的操作码 (CONTINUE_LOOP)”错误
- dapper - Dapper、SqlBuilder 扩展和降序排序
- c++ - 如何通过按 F2 或 F3 之类的键使控制台打印一些东西
- python - 从另一个目录导入 python 模块失败
- c++ - 如何使用 C++17 (mutex 或 shared_mutex) 为生产者/消费者实现 wait()
- scikit-learn - RandomForestRegressor:关于输出、参数和执行时间的问题
- python - 我想把 \ 变成一个字符串
- php - PHP 从 cli 脚本运行后台脚本
- linux-kernel - 在同一物理内存位置运行进程