无法从sk_buff获取数据(有效负载)

我尝试创建一个用于加密网络数据包的模块,但是当尝试从 sk_buff 获取数据并在Hexa中打印时,无法获得正确的数据包。 我使用这种方法在Hexa中打印数据:

void pkt_hex_dump(struct sk_buff *skb)
{
    size_t len;
    int rowsize = 16;
    int i,l,linelen,remaining;
    int li = 0;
    uint8_t *data,ch;

    printk("Packet hex dump:\n");
    data = (uint8_t *) skb_mac_header(skb);

    if (skb_is_nonlinear(skb)) {
        len = skb->data_len;
    } else {
        len = skb->len;
    }

    remaining = len;
    for (i = 0; i < len; i += rowsize) {
        printk("%06d\t",li);

        linelen = min(remaining,rowsize);
        remaining -= rowsize;

        for (l = 0; l < linelen; l++) {
            ch = data[l];
            //data[l] = '1';
            printk(KERN_CONT "%02X ",(uint32_t) ch);
        }
        data += linelen;
        li += 10;

        printk(KERN_CONT "\n");
    }
}

我用这个sample创建了一个聊天应用程序。

当我从客户端向服务器发送output消息时,hello world是:

[ 3981.963124] Packet hex dump:
[ 3981.963125] 000000   00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00
[ 3981.963128] 000010   00 34 6A 1F 40 00 40 06 D1 A2 7F 00 01 01 7F 00
[ 3981.963130] 000020   00 01 07 E4 BD 36 A2 52 E9 62 6D 40 3D FE 80 10
[ 3981.963133] 000030   02 00 FF 28 

我尝试遵循此solution,但无法获得任何输出。

我的挂钩函数

static unsigned int hfunc( void *priv,struct sk_buff *skb,const struct nf_hook_state *state){

    struct iphdr *iph;          /* IPv4 header */
    struct tcphdr *tcph;        /* TCP header */
    uint16_t sport;
    uint16_t dport;
    struct ethhdr *ether = eth_hdr(skb);


    iph = ip_hdr(skb);          /* get IP header */
    tcph = tcp_hdr(skb);        /* get TCP header */
    sport = ntohs(tcph->source);
    dport = ntohs(tcph->dest);

      /* Watch only port of interest */
    if (dport == PTCP_WATCH_PORT || sport == PTCP_WATCH_PORT){



    printk(KERN_INFO "UDP packet is received: {'sport': %d; 'dport': %d}\n",sport,dport);



   printk("Source: %x:%x:%x:%x:%x:%x\n",ether->h_source[0],ether->h_source[1],ether->h_source[2],ether->h_source[3],ether->h_source[4],ether->h_source[5]);
   printk("Destination: %x:%x:%x:%x:%x:%x\n",ether->h_dest[0],ether->h_dest[1],ether->h_dest[2],ether->h_dest[3],ether->h_dest[4],ether->h_dest[5]);
   printk("Protocol: %d\n",ether->h_proto);


    pkt_hex_dump(skb);

    }
    return NF_accEPT;
}
fangchengkuan 回答:无法从sk_buff获取数据(有效负载)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2670583.html

大家都在问