jaky_shark
驱动牛犊
驱动牛犊
  • 注册日期2007-05-03
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望21点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:1930回复:2

如何在内核模块中打印出捕获的数据包的内容

楼主#
更多 发布于:2007-11-07 19:42
我用netfilter钩子写了一个捕获指定IP发往本地指定端口的UDP包的内核模块,功能已经实现。但是现在有个问题,我如何能在此模块内部打印出UDP头部后面的用户数据呢?
//uhead指针指向UDP头部
struct udphdr *uhead = (struct udphdr*)(skb->iphdr + sizeof(struct iphdr));

//去除UDP头,cdata指针指向用户数据
unsigned char *cdata = (unsigned char*)(uhead + sizeof(struct udphdr));

//我在客户端用socket调试工具发了udp数据包,内容为abcd,模块已经抓到该包
printk("%c",*cdata);  //无法打印出字符a???

请高手指点:如何在内核模块中打印出捕获的数据包的内容?谢谢!
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2007-11-13 08:15
打印16进制,就像tcpdump一样
走走看看开源好 Solaris vs Linux
wave.lu
驱动牛犊
驱动牛犊
  • 注册日期2007-11-29
  • 最后登录2008-01-02
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-29 11:45
如2楼,用16进制打印,另外,通过循环遍历你要打印的长度。当然长度就是你的包长度了哦。
游客

返回顶部