【问题标题】:network device module equivalent to ping相当于 ping 的网络设备模块
【发布时间】:2012-02-05 14:12:44
【问题描述】:

我已经制作了一个正在传输的模块,但我不知道我正在传输的数据包是否是 ping 数据包。代码如下:

 icmp.type = 8;
 icmp.code = 0;
 icmp.un.echo.sequence = i;
 ip4.protocol = 1; //for icmp protocol
 ip4.frag_off = 0;
 ip4.daddr = in_aton(procfs_buffer);
 ip4.saddr = in_aton(ifr->ifr_addr.sa_data);

 len = sizeof(data);

 skb = dev_alloc_skb(1500);
 skb->dev = __dev_get_by_name(&init_net,"wlan0");
 skb_reserve(skb,NET_IP_ALIGN); // header of 2 bytes; increments tail and 
                                // data pointer
 skb->data = skb_put(skb,sizeof(len)); // increments all pointer or adds data
 memcpy(data,skb->data,len);

 skb->transport_header =skb_push(skb,sizeof(icmp));
 memset(skb->transport_header,0,sizeof(struct icmphdr));
 memcpy(skb->transport_header,&icmp,sizeof(struct icmphdr));

 skb->network_header=skb_push(skb,sizeof(ip4));
 memset(skb->network_header,0,sizeof(struct iphdr));
 memcpy(skb->network_header,&ip4,sizeof(struct iphdr));

 // printk("i::%d\n",i);
 // skb->mac_header = skb_push(skb,6*sizeof(0xFF));
 // memset(skb->mac_header,0xFF,6*sizeof(0xFF));
 dev_queue_xmit(skb);
 kfree(skb);

我怎么知道我正在创建和传输的是一个 ping 数据包?此外,我想收到 ping 数据包以响应我传输的 ping 数据包。我想使用 napi,但不介意任何其他建议。

请阅读一个主题:接收napi模式here我无法从上面的链接中理解该做什么.....

【问题讨论】:

  • 你做了一个内核模块,但你不知道它是做什么的......?
  • @Carpetsmoker 我知道它在做什么(此时它只是传输)但我不确定它是否传输 ping 数据包,也不知道如何接收数据包并检查它们是否是 ping 响应从另一边

标签: c linux linux-kernel linux-device-driver


【解决方案1】:

您可以使用wireshark 捕获进出您的网络接口之一的所有网络流量。您将能够检查数据包是否已发送,以及它是否真的是您所期望的。您还可以查看您的 ping 是否有答案。

关于如何从模块中截取 ping 答案的问题,您可以使用内核提供的 netfilter API。 Here is 一篇很好的文章,开始使用 netfilter。

【讨论】:

    【解决方案2】:

    ping 数据包只是代码为 8 的 icmp 数据包,其数据中有时间戳 icmp echo reply(ping回复)只是从icmp echo请求中复制数据并将其发送回来,这样ping可以告诉您往返花费了多少时间(现在-上一个发送时间)

    我对linux内核不是很熟悉,但是一定要计算正确的ip和icmp校验和

    也用于接收,使用netfilter可能会更好

    【讨论】:

    • 能否请您告诉我如何计算校验和或者内核提供的任何函数来计算它.....
    • @karan421 看看icmp_push_reply() 调用自icmp_reply() 里面net/ipv4/icmp.c,就像我说的,我不熟悉linux 内核
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多