- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用以下 python 代码将原始以太网帧发送到环回接口(interface) (Linux ubuntu 4.15.0-34-generic):
from scapy.all import *
pkt = Ether(dst="aa:aa:aa:aa:aa:aa", src="00:ff:00:ff:00:ff", type=0x6666) / ("A"*50)
sendp(pkt, iface="lo")
(我们使用自定义以太网类型 0x6666,但使用以太网 II 帧格式指定的数据包长度 (50) 具有相同的结果)
我希望在接收器(或 Wireshark)上看到一个长度为 14+50=64 字节的数据包。相反,我看到一个 14+50+14=78 字节的数据包。添加的 14 个字节的内容看似随机(或者可能是来自未清零的重用缓冲区的数据)。
例如,以下 Wireshark 输出来自两次连续调用上述代码:
0000 aa aa aa aa aa aa 00 ff 00 ff 00 ff 66 66 41 41 .....................ffAA
0010 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0020 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0030 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0040 00 00 00 00 00 00 10 00 00 00 00 00 00 00 ..................
0000 aa aa aa aa aa aa 00 ff 00 ff 00 ff 66 66 41 41 .....................ffAA
0010 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0020 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0030 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0040 22 20 68 6f 73 74 6e 61 6d 65 3d 3f 20 61 "主机名=?a
我很好奇为什么要添加 14 个字节(因为数据包比以太网数据包所需的 64 个字节长,所以这不是填充问题)?在这个例子中如何去掉额外的 14 个字节?
最佳答案
以下对内核的提交是导致原始发布者提到的回归的原因。
说明:packet:在packet_snd中链路层分配处开始写入
Git SHA: c6026847a0a1198e4d0b200da6666cb1056b12fe
https://lore.kernel.org/patchwork/patch/899678/
解决方案有几个选项。
1) 降级到 4.15.0-32-generic 或之前
2) 下载当前内核的源代码并删除该补丁并在没有它的情况下进行编译。
3) 向 lkml 报告并等待他们修复它。
上面的补丁提到它也适用于 RAW 数据包,但它在附加更多字节之前不检查大小以查看是否需要附加任何字节。最小总数据包大小应为 64 字节。
表明上面的补丁不再存在于当前内核和kernel.org中,这是一个ubuntu问题。
EDIT2:git 树中的 ubuntu 4.15.0-36.39 不再有 33 中出现的补丁。所以 ubuntu 应该在某个时候解决这个问题。
关于python - 为什么将 14 个字节的随机数据附加到原始以太网帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52435788/
在我们的服务出现一些预期的增长之后,突然间一些更新花费了非常长的时间,这些过去非常快,直到表达到大约 2MM 记录,现在它们每个需要大约 40-60 秒。 update table1 set fiel
我在服务中实现了一个传感器事件监听器,只要采样周期和最大报告延迟低于 1 秒,该监听器就可以正常工作,但一旦我将采样周期增加到超过 1 秒,传感器就根本不会更新。 我希望采样周期为 10 秒(可能是
我使用 Tkinter GUI 来启动测量和分析过程,基本上只需单击一个按钮即可开始。由于这些测量可能需要一段时间,我尝试添加一个进度条,即这个: http://tkinter.unpythonic.
我正在尝试使用套接字发送数据包,但出现错误。 invalid conversion from ‘omnetpp::cPacket*’ to ‘inet::Packet*’ [-fpermissive]
我刚刚发现 String#split 有以下奇怪的行为: "a\tb c\nd".split => ["a", "b", "c", "d"] "a\tb c\nd".split(' ') => ["a
您好,我正在尝试 ClojureScript,我正在使用 Klipse作为我的 REPL 差不多。这可能不是它的预期用途,但因为我没有做任何太复杂的事情,所以现在没问题。 我遇到的一个问题是尝试设置计
根据下面的数据,ClockKit 会生成一次 future 的 CLKComplicationTimelineEntry 项,但对于过去的时间点,会进行 24 次调用!这是为什么? 更多详情: 我注意
我有一个 MySQL 表,这个表有一个名为 datetime_utc 的 DATETIME 列。如您所料,它是 UTC 日期和时间。在我的 Bookshelf 模型中,我定义了一个虚拟 getter,
大家好,我是二哥呀! 昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源
我是一名优秀的程序员,十分优秀!