TGINSIGHT CHAT
Welcome to the Black Parade
@TheB1ackParade
MusicDeath has many faces, I look forward to seeing this one.
Recent posts
Page 68 of 76 · 907 posts
Posted Jun 9
https://github.com/jschwinger233/xdp-tutorial/tree/zc/bcc 我花了几天断断续续把 xdp-tutorial 里代码用 bcc 实现了一遍,除了 AF_XDP 和 fib_lookup 两道题,前者感觉繁琐难用不如 redirect 到设备,后者倒是可以用来连接两个二层网络,但我觉得干嘛不直接用 bpf map。 xdp-tutorial 这个项目是开源社区“燃烧自己照亮智障”的又一力作,是真正的共产主义,治病救人,天下为公,人民万岁。唯一的问题是通过填空的方式来教学失去了大量细节,比如 if (__builtin_memcmp() == 0) __builtin_memcpy() 在使用全局 static 变量时是编译不过的,这些很细的点只有自己亲自摸过一遍才能知道,所以我用 bcc 自己从头撸了一遍,少了 libbpf 的细节,但是 xdp 的核心还能保留,感觉是个不错的入门方式,推荐大家也试试看。
Posted Jun 8
Scapy 太好用了,不管是 raw bytes 解包还是 pcap dump,都是符合人类常识的 APIs。 搜 Python libpcap 搜出来 wrapper 也极其难用,殊不知最好用的 wrapper 在 Scapy。 这也是唯二我每月自动打钱的项目。 反观一下 libpcap,吐了。
Posted Jun 8
这样和波波在之前讨论的 Calico 黑洞问题就实操搞定了:用 XDP 在每台宿主机的 ingress 设备上反弹 ICMP,,用 BPF HASH 通过用户态 daemon 传递数据告知哪些 IP 是管辖的 CIDR 里但是进入了黑洞路由。不影响 BGP 也不改 iptables,非常完美。
Posted Jun 8
bpf-helpers(7) 里的 bpf_csum_diff 好像是有 bug 的?它的算法一言以蔽之就是 sum' = ~(~sum + ~from + to), 然而在原始 sum 是通过进位计算的情况下这样计算是不正确的。不是特别确定,毕竟是内核的函数,总不能让我发现内核的 bug 吧,不合理。再多做一点测试。
Posted Jun 8
新版动物书都是白皮了 感觉没有以前好看 vi这本居然已经出到第八版 2021年出版的
Posted Jun 8
高达一千页的 Fluent Python 第二版;第一次见到 SICP 实体
Posted Jun 8
bpf 的内存边界校验很严格,比如这段代码里 35L 的三个条件删去一个都会编译报错 perm deny,尽管上面的两个 if 已经保证了这样的边界信息。报错又看不懂,日常被 bpf verifier 调教做人++
Posted Jun 7
bpf-helpers(7) 里的 bpf_csum_diff 好像是有 bug 的?它的算法一言以蔽之就是 sum' = ~(~sum + ~from + to), 然而在原始 sum 是通过进位计算的情况下这样计算是不正确的。不是特别确定,毕竟是内核的函数,总不能让我发现内核的 bug 吧,不合理。再多做一点测试。
Posted Jun 6
我可真是一个大聪明,把 ssh 出口路由导向 vlan,行为艺术堪比用 iptables 把 22 端口全部 drop
Posted Jun 6
veth 太迷惑了,默认的 veth 都是打开 vlan offload 的,以至于 xdp on veth 根本看不到 vlan tag,而 tcpdump 明明看得一清二楚,简直见鬼了! 好好的 veth 又不是真的网卡你搞这些干嘛啊! 看起来要用 tc 子系统的 bpf 屁事更少,但是 tc 有 tc 的问题,看看这两周能不能解决。
Posted Jun 6
解包器对 vlan 的显示让人迷惑。按照 802.1Q,vlan header 是插入在 ether header 中间的,但是不管是 wireshark 还是 scapy 都显示得像是 append 在 ether header 之后。 仔细看才会发现,原来本应该是 [+13, +16] 的字节是 vlan header, 被解包器重新结构化为 [+15, +18]。 这样写程序解包的时候也不必拘泥于原生的结构定义,直接用 `struct vlan_hdr {__be16 TCI; __be16 proto;};`就行。
Posted Jun 5
bcc 对 pinned map 的支持不是特别好, 虽然能用, 但是僵硬, 要硬拷贝一部分代码, 不然就要指向完整的 bpf 代码, 重新编译一遍. 不过考虑到给 bcc 提供了 map 的类型之后, map.items() 这类 Python API 返回的数据结构不用 ctypes.cast 就可以直接取结构体字段, 我觉得还是可以接受的: 用额外的一段代码免去了手动映射类型的繁琐.