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