LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 884|回复: 6

有没有给网络数据包剥皮的函数?

[复制链接]
发表于 2004-11-15 19:46:15 | 显示全部楼层 |阅读模式
最好是类什么的,手动剥皮太痛苦了
发表于 2004-11-16 11:25:05 | 显示全部楼层
没看懂。。。
发表于 2004-11-16 12:38:17 | 显示全部楼层
hah ,就是解包吧
也不难啊 ,首先是以太浈,然后是IP包,接着是 UDP或者TCP

如果是拨号或者ADSL,还有PPPOE头.
按照包头各式各自定义一个结构,对应每一层来解析就OK啦
发表于 2004-11-16 13:40:24 | 显示全部楼层
我用的redhat9.0, 在/usr/include/linux/有一个skbuff.h,里面定义了一批数据结构用于处理网络包,核心为sk_buff这个结构。
这是linux内核程序的一部分。有一套操作函数,没有用过,不清楚效果如何。
包缓冲由sk_buff结构描述, 包缓冲数据区由其head和end成员界定,

而包数据体则由包数据区内data和tail界定的子区域来描述,

采用这种结构可以使添加或去除包头的操作变得非常方便.


skb_put(skb,len)  在包体尾部扩展长度为len的数据块, 返回扩展块的地址,

__skb_put()为未校验版本

skb_push(skb,len) 在包体前部扩展长度为len的数据块, 返回扩展块的地址,

__skb_push()为未校验版本

skb_pull(skb,len) 去除包体前部长度为len的数据块, 返回新包体的起始地址,

__skb_pull()为未校验版本

skb_headroom(skb) 返回包体前部距离包区开始的长度

skb_tailroom(skb) 返回包体尾部距离包区结束的长度

skb_reserve(skb,len) 设置包体起始位置为包区开始的len字节

skb_trim(skb,len) 将包体截断为len字节, __skb_trim()
发表于 2004-11-16 14:08:55 | 显示全部楼层
把tcpdump的代码拿去参考下
 楼主| 发表于 2004-11-16 15:17:10 | 显示全部楼层
多谢哈,不过,看样子要自己写一个这样的函数了,正在看ing
发表于 2004-11-17 09:36:10 | 显示全部楼层
不知道socket文件描述符的ioctl底层系统调用提供不提供你所说的功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表