Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

checksum 问题 #38

Closed
veo opened this issue Nov 13, 2023 · 17 comments
Closed

checksum 问题 #38

veo opened this issue Nov 13, 2023 · 17 comments
Labels
question Further information is requested

Comments

@veo
Copy link
Contributor

veo commented Nov 13, 2023

我写了一个xdp的程序,修改了端口信息,发现UDP包可以正常使用,但是TCP无法使用

根据搜索了解可能是sum没有校验通过的问题?

bpf_helpers.h 内并没有ipv4_csum类似的函数,从网上找了很多其他人写的代码,也无法使用

大佬可以请教一下这个问题怎么解决吗?是不是checksum的问题?

@cfc4n cfc4n added the question Further information is requested label Nov 13, 2023
@cfc4n
Copy link
Member

cfc4n commented Nov 13, 2023

bpf_csum_*等csum函数挺多的,都是bpf内置的。 用法上,可以搜一下,很多。

https://github.com/facebookincubator/katran/blob/main/katran/lib/bpf/csum_helpers.h

https://github.com/tklauser/cilium/blob/main/bpf/lib/csum.h

@veo
Copy link
Contributor Author

veo commented Nov 13, 2023

代码类似,udp正常,tcp不正常,是不是大概率是checksum的问题呢?有没有什么调试方法能够判断?因为目前只看到tcp不正常也不知道是不是sum的问题

@veo
Copy link
Contributor Author

veo commented Nov 14, 2023

找到方法了,用tcpdump -ev参数可以看到 sum incorrect,用了网上各种csum函数都不行,头疼

@cfc4n
Copy link
Member

cfc4n commented Nov 14, 2023

一般情况下csum错了,不影响tcp通讯。

@veo
Copy link
Contributor Author

veo commented Nov 14, 2023

大佬方便加个好友吗?我刚开始学ebpf,想请教您一些问题

@cfc4n
Copy link
Member

cfc4n commented Nov 14, 2023

起码为社区做一些贡献吧。 比如 gojue/ecapture#413 (review) 这里的同学。 😂

@veo
Copy link
Contributor Author

veo commented Nov 14, 2023

我再学学。。。刚接触

@veo
Copy link
Contributor Author

veo commented Nov 15, 2023

等我解决这个问题我可以在这个项目试试写些example

@veo
Copy link
Contributor Author

veo commented Nov 15, 2023

我已经把check sum都算对了,tcp本机端口转发还是失败,但是转发到其他机器可以,不是checksum的问题

只要是转发到本机,握手包只有syn,没有ack,不知道为什么

@cfc4n
Copy link
Member

cfc4n commented Nov 15, 2023

XDP只能读取ingress的包。 你修改的话,是不是要用TC或者其他类型?

image

@veo
Copy link
Contributor Author

veo commented Nov 15, 2023

我是看了大佬你的这篇文章,参考了过防火墙的那部分技术,但是我无法复现
https://www.cnxct.com/evil-use-ebpf-and-how-to-detect-ebpf-rootkit-in-linux/

@veo
Copy link
Contributor Author

veo commented Nov 15, 2023

找到原因了,TC改egress和ingress确实可以。我之前XDP本机改了无效的原因也找到了,因为收包的 tcp->dest 改变了,发包的时候要把 tcp->source 改回来才行,这样看XDP确实无法实现本机端口转发?

@veo
Copy link
Contributor Author

veo commented Nov 15, 2023

那大佬的文章写的例子是怎么办到的- -

@cfc4n
Copy link
Member

cfc4n commented Nov 15, 2023

我是看了大佬你的这篇文章,参考了过防火墙的那部分技术,但是我无法复现 https://www.cnxct.com/evil-use-ebpf-and-how-to-detect-ebpf-rootkit-in-linux/

有一定的攻击性,不方便公开细节。 已经公开部分也有一定模糊。仅提供思路。

@cfc4n
Copy link
Member

cfc4n commented Nov 15, 2023

那大佬的文章写的例子是怎么办到的- -

公众号里给我发个消息。

@cfc4n cfc4n closed this as not planned Won't fix, can't repro, duplicate, stale Nov 18, 2023
@cucxbd
Copy link

cucxbd commented May 9, 2024

我已经把check sum都算对了,tcp本机端口转发还是失败,但是转发到其他机器可以,不是checksum的问题

只要是转发到本机,握手包只有syn,没有ack,不知道为什么

你好,请教一下是怎么计算的checksum,我也试了好多方法,结果都是bpf 校验器过不了

@veo
Copy link
Contributor Author

veo commented May 9, 2024

我已经把check sum都算对了,tcp本机端口转发还是失败,但是转发到其他机器可以,不是checksum的问题
只要是转发到本机,握手包只有syn,没有ack,不知道为什么

你好,请教一下是怎么计算的checksum,我也试了好多方法,结果都是bpf 校验器过不了

从网上搜得到很多算checksum的。我有点忘记了,我当时的问题不是checksum的问题,好像checksum算错也是可以通信的,好像奥

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants