首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于ping的网络设备模块

问相当于ping的网络设备模块
EN

Stack Overflow用户
提问于 2012-02-05 22:12:45
回答 2查看 522关注 0票数 0

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

代码语言:javascript
复制
 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我无法理解从上面的链接做什么.....

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-06 01:27:16

一个ping信息包就是带有代码8的icmp信息包,在它的数据中带有时间戳icmp echo回复(ping回复)只是从icmp echo请求中复制数据并将其发送回来,这样ping就可以告诉你往返所用的时间(现在是-prev的发送时间)。

我不太熟悉linux内核,但请确保计算出正确的ip和icmp校验和

同样对于接收,最好使用netfilter

票数 0
EN

Stack Overflow用户

发布于 2012-02-06 01:10:35

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

关于如何拦截来自模块的ping应答的问题,您可以使用内核提供的netfilter API。Here is是一篇关于使用netfilter的好文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9149906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档