还可以同时得到里面的载荷,就是数据内容。但就是得不到数据内容,我先尝试用char类型的指针,
struct packet_info
{
__u32 srcIP;
__u32 destIP;
__u16 destPort;
__u32 seq;
__u32 ack_seq;
__u16 doff;
__u8 fin;
__u8 syn;
__u8 ack;
char *data;
};
其中data就是载荷数据,不包括包头的。
然后在钩子函数里处理skb,赋值给packet_info结构体。
info.data = (char *)((*pskb)->data+(iph->ihl*4)+(thead->doff*4));
然后,使用netlink_unicast发送,用户区程序接受,但收到的要么没有东西,要么是乱码
原帖由 GoldenSoldier 于 2009-6-24 20:22 发表
我也觉得是内存地址的指向问题,于是:
1给它kmalloc分配空间,不行;
2使用char数组,也还是不行,空间分的比较大2048,结果直接死机了
空间分的比较大2048,结果直接死机了
原帖由 GoldenSoldier 于 2009-6-24 21:29 发表
在测试。。。。
初步结果出来了。我先用了ethereal做了比对,把data[1450],做出来的结果已经和ethereal一致了。
上面提到的死机,可能是我记错了,应该是|给它kmalloc分配空间|导致的。
多谢,多谢!!
...
原帖由 GoldenSoldier 于 2009-6-25 08:54 发表
的确,在我所看到的一些项目里,一般是使用nf_sock_opt来做控制选项的,而多使用netlink传输数据的。Linux 内核提供 copy_from_user()/copy_to_user() 函数来实现内核态与用户态数据的拷贝,但这两个函数会引发 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |