Chinaunix
标题:
帮帮我!linux2.6以后怎么从struct sk_buff中提取出ip port并打印出来
[打印本页]
作者:
1581526111
时间:
2016-08-30 11:12
标题:
帮帮我!linux2.6以后怎么从struct sk_buff中提取出ip port并打印出来
帮帮我!linux2.6以后怎么从struct sk_buff中提取出ip port并打印出来
帮帮我!linux2.6以后怎么从struct sk_buff中提取出ip port并打印出来
帮帮我!linux2.6以后怎么从struct sk_buff中提取出ip port并打印出来
帮帮我!linux2.6以后怎么从struct sk_buff中提取出ip port并打印出来
作者:
Godbach
时间:
2016-08-30 13:26
回复
1#
1581526111
看论坛置顶的精华帖。
作者:
1581526111
时间:
2016-08-30 13:37
已解决 谢谢版主大哥
static int check_ip_packet(struct sk_buff *skb)
{
__be32 sip,dip;
printk("<0>" "skb=%p\n",skb);
if(skb){
printk("<0>" "in skb\n");
struct sk_buff *sb = NULL;
sb = skb;
struct iphdr *iph;
iph = ip_hdr(sb);
if(!iph){
return -1;
}
printk("<0>" "ipd is not null\n");
sip = iph->saddr;
dip = iph->daddr;
printk("<0>" "Packet for source address: %d.%d.%d.%d\n destination address: %d.%d.%d.%d\n ", NIPQUAD(sip), NIPQUAD(dip));
}
return 0;
}
作者:
Godbach
时间:
2016-08-30 13:50
回复
3#
1581526111
作者:
1581526111
时间:
2016-08-30 15:26
拿到端口的地址类型是__be16,该怎么把它变成数字呀
作者:
Godbach
时间:
2016-08-31 01:05
1581526111 发表于 2016-08-30 15:26
拿到端口的地址类型是__be16,该怎么把它变成数字呀
__be16 本身就是数值类型啊,只是代表 big edian 的意思,告诉你这个字节序是大端的。你用的时候要注意。
作者:
Godbach
时间:
2016-08-31 01:06
回复
5#
1581526111
直接用 printk 打印16 进制结果出来,然后感受一下和你认为的 IP 地址是否对应,顺便感受下网络字节序的问题。
作者:
1581526111
时间:
2016-09-03 14:52
多谢指点,已经解决了 ntohs(_be16) n:net h:host s:short 我这么理解不造有错没
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2