C 语言实现操作 tcp 数据包?

2017-03-02 17:56:04 +08:00
 calisto
想法是这样的,在 linux 上创建一个网桥,数据包从 eth0 入, eth1 出, br0 绑定这两个网口。把从 eth0 进来的流量导到本地的 9001 端口,对 9001 端口的包分析里面的请求,完了之后重 eth1 出去
3769 次点击
所在节点    编程
15 条回复
paw
2017-03-02 18:13:49 +08:00
为啥要导到 9001 上?
如果只是要分析数据包,不做修改,直接 libpcap 抓包就是了。
eth0 转到 eth1 ,用 iptables 规则应该可以实现。
redsonic
2017-03-02 20:10:59 +08:00
用内核的 netfilter 框架可以随便搞
julyclyde
2017-03-02 20:51:53 +08:00
首先, TCP 是流
jedihy
2017-03-03 02:38:54 +08:00
@julyclyde 流就没有数据包了?
calisto
2017-03-03 09:34:45 +08:00
@paw 分析数据包,要按规则拒绝某些请求
paw
2017-03-03 10:04:48 +08:00
@calisto 好说啊,分析发现需要拒绝的了,直接往两个方向都扔一个 RST ,完事......学学 GFW ,依然不需要导流什么的

等等,你是在自己实现 GFW 吗?

如果你是要实现硬件防火墙、 DDOS 流量清洗之类的功能,只能上 Kernel bypass 了, https://blog.cloudflare.com/kernel-bypass/ 脱离内核协议栈,直接从网卡拿原始包,然后数据包怎么转 /去或留都是你说的算了。
calisto
2017-03-03 10:06:55 +08:00
@redsonic freebsd 也有 netfilter ?
calisto
2017-03-03 10:08:03 +08:00
@paw 类似!可是要审计到 7 层
calisto
2017-03-03 10:15:11 +08:00
@paw 实现 waf ,网桥透传
paw
2017-03-03 12:44:27 +08:00
@calisto 那就用 DPDK 开发呗,我现在做的东西也是类似的,可行性不用担心肯定可以
julyclyde
2017-03-03 15:31:00 +08:00
@jedihy 你按包来改回导致后续的序列号、长度匹配不上,然后就被 DROP 了
calisto
2017-03-03 15:34:30 +08:00
@paw 有资料么?借我参考一下 731330218@qq.com
paw
2017-03-03 19:32:01 +08:00
jedihy
2017-03-04 15:00:57 +08:00
@julyclyde 压根都不会改那些东西,只要做重定向
calisto
2017-04-06 09:46:19 +08:00
@paw THX

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/344397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX