免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: linux_sjj

[其他] 请问那个大神可以告诉小弟,看连接跟踪的代码,从哪里入手。 [复制链接]

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-07 10:14 |显示全部楼层
从最基本的conntrack逻辑入手,暂时先不用关心exepct/helper/NAT等扩展功能。

基本逻辑很简单,来了报文查表,查到就结束,查不到就新建。(稍微特殊的地方在于有个confirm过程)

额外的复杂度可能来自于生命周期的管理(引用计数、超时、并发考虑等)

论坛徽章:
5
15-16赛季CBA联赛之山东
日期:2016-03-22 11:49:0815-16赛季CBA联赛之八一
日期:2016-03-22 14:06:00IT运维版块每日发帖之星
日期:2016-03-27 06:20:0015-16赛季CBA联赛之天津
日期:2016-03-28 15:22:28IT运维版块每日发帖之星
日期:2016-07-16 06:20:00
发表于 2016-03-07 10:37 |显示全部楼层
回复 11# nswcfd


    这个模块自己用代码实现感觉没头绪,而且我不太清楚处理.pcap数据报的时候那个sk_buff是自己默认就带的参数吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2016-03-07 11:57 |显示全部楼层
本帖最后由 Godbach 于 2016-03-07 11:59 编辑

回复 9# linux_sjj
先熟悉代码,熟悉功能啊,一点一点了。

你要是看一遍代码,都知道怎么写了。那你就是大牛了。


   

论坛徽章:
5
15-16赛季CBA联赛之山东
日期:2016-03-22 11:49:0815-16赛季CBA联赛之八一
日期:2016-03-22 14:06:00IT运维版块每日发帖之星
日期:2016-03-27 06:20:0015-16赛季CBA联赛之天津
日期:2016-03-28 15:22:28IT运维版块每日发帖之星
日期:2016-07-16 06:20:00
发表于 2016-03-07 18:01 |显示全部楼层
回复 13# Godbach


    请问,这个机制,是系统自己调用的吧,那些所有的结构体,在应用层上面根本调不出来,领导给的任务:
1. 掌握连接跟踪的概念,并可以编程实现。
2. 使用连接跟踪的方式,组合数据包,将pcap中http流里下载的html,js,image之类的文件导出保存.

第一个:编程实现,这个不是内核自带的吗,而且,我们如果去编程实现,不是有好多宏调不出来。
第二个:不是自动实现的吗,问你什么还要去掉用函数组合,好蒙。可能给我讲点思路。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2016-03-07 19:10 |显示全部楼层
回复 14# linux_sjj

连接跟踪是内核层面的功能。提供给用户空间的有查询功能,还有部分配置功能。

建议你先认真熟悉一下连接跟踪,以及在用户态能够对连接跟踪有哪些查询和操作,比如通过 iptables/sysctl 等。


   

论坛徽章:
0
发表于 2016-03-07 21:30 |显示全部楼层
这个就不好说了。

论坛徽章:
5
15-16赛季CBA联赛之山东
日期:2016-03-22 11:49:0815-16赛季CBA联赛之八一
日期:2016-03-22 14:06:00IT运维版块每日发帖之星
日期:2016-03-27 06:20:0015-16赛季CBA联赛之天津
日期:2016-03-28 15:22:28IT运维版块每日发帖之星
日期:2016-07-16 06:20:00
发表于 2016-03-08 08:57 |显示全部楼层
回复 15# Godbach


   有没有你说的,连接跟踪给用户提供的api接口函数的文档可以参考啊,谢谢啊

论坛徽章:
5
15-16赛季CBA联赛之山东
日期:2016-03-22 11:49:0815-16赛季CBA联赛之八一
日期:2016-03-22 14:06:00IT运维版块每日发帖之星
日期:2016-03-27 06:20:0015-16赛季CBA联赛之天津
日期:2016-03-28 15:22:28IT运维版块每日发帖之星
日期:2016-07-16 06:20:00
发表于 2016-03-08 10:02 |显示全部楼层
回复 15# Godbach

你有做过连接跟踪相关的吗,我就是想不通数据包,来的时候,系统是怎么获取到sk__buff这个结构体,还有就是那个hash列表,里面,当当同一个方向的tuple是,是改变这个hash点的状态,还有内容吗,还是在搞什么。
   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2016-03-08 13:36 |显示全部楼层
回复 18# linux_sjj
这个都超出连接跟踪的范畴了。

你看一下置顶精华帖,有讲述数据包在链路层和网络层收发的文章,应该会对你有所帮助。

你问的问题太大,应该需要你自己先做一些资料查询,阅读代码之类的准备工作。


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-08 20:09 |显示全部楼层
不好意思,才看到消息。平时不怎么上qq的。

感觉楼主领导的意思是要在用户态模拟conntrack的逻辑?
那就不需要关心内核的skb到底是怎么回事,又是怎么被驱动+协议栈送给conntrack hook的,只需要知道skb是对数据包的一个抽象就行了。

conntrack的核心就是一个hash表,对五元组做hash求一个key,hash算法可以照抄内核的jhash,也可以自己选择其他的。
用户态做hash表的方法有很多,stl的map+vector应该就够用了。不行的话,照抄内核的hlist也行。

PS,简单模拟的话甚至都不需要hash表,并发数不高的话,简单的线性表(数组或链表)就可以了。

为什么需要conntrack?因为pcap文件中可能有多个会话,需要把属于不同连接的报文区分开来。

什么样的报文属于一个会话?五元组相同的,注意A->B和B->A两个方向的五元组命中同一个会话。
楼主可以选择向conntrack一样,把A->B和B->都插入到hash表(或者线性表)中,这样无论查找A->B还是B->A只需要查询一次。
也可以只插入A->B,查找的时候,先后按照A->B和B->A查询两次,只要有一个命中就算查到。

报文又是什么?pcap库提供了报文的一种表示,就是一定长度的buffer。

所以基本流程就是,在pcap的回调函数里,分析报文,提取ip/tcp头部,拼出五元组,去查找会话表,查不到新建一个,于是报文就跟会话关联了。

那么对于分析html这个任务来说,会话究竟有什么用?说到底就是一句话,存放会话的状态机。
比如tcp的前三个包是个状态机,http header和http body又是状态机,html的标签还是状态机。
这样,根据状态机记录的状态,就知道之前的报文分析到哪一步了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2021中国系统架构师大会

【数字转型 架构重塑】2021年5月20日-22日第十三届中国系统架构师大会将在云端进行网络直播。

大会为期3天的议程,涉及20+专场,近120个主题,完整迁移到线上进行网络直播对会议组织来说绝非易事;但考虑到云端会议的直播形式可以实现全国各地技术爱好者的参与,也使ITPUB作为技术共享交流平台得到更好的普及,我们决定迎难而上。
http://sacc.it168.com/


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP