C 在skb中打印transport_标头中的值
我正在尝试发送ping pkt。通过编写内核模块。当我检查通过tcpdump发送的内容时,我看到了一些东西,但它不是icmp标头。因此,我决定检查标头transport_标头和network_标头(skb的成员)中的内容。我如何使用printk命令来执行此操作(或任何其他操作)。请查看以下代码C 在skb中打印transport_标头中的值,c,linux-kernel,kernel-module,C,Linux Kernel,Kernel Module,我正在尝试发送ping pkt。通过编写内核模块。当我检查通过tcpdump发送的内容时,我看到了一些东西,但它不是icmp标头。因此,我决定检查标头transport_标头和network_标头(skb的成员)中的内容。我如何使用printk命令来执行此操作(或任何其他操作)。请查看以下代码 icmp.type = ICMP_ECHO; icmp.code = 0; icmp.un.echo.sequence = i++; icmp.un.echo.id = current->pid &
icmp.type = ICMP_ECHO;
icmp.code = 0;
icmp.un.echo.sequence = i++;
icmp.un.echo.id = current->pid & 0xFFFF;
skb->transport_header =skb_push(skb,sizeof(icmp));
memset(skb->transport_header,0,sizeof(struct icmphdr));
memcpy(skb->transport_header,&icmp,sizeof(struct icmphdr));
这会很难看,但可读性很强:
unsigned int *p = skb->transport_header;
for (i=0;i<sizeof(the header you want)/sizeof(int);i++) {
printk("%08x", ntohl(p_i[i]));
}
printk("\n");
unsigned int*p=skb->transport\u头;
对于(i=0;i