модуль сетевого устройства эквивалентен ping - PullRequest
0 голосов
/ 05 февраля 2012

Я сделал модуль, который передает, но я не знаю, является ли пакет, который я передаю, пинг-пакетом или нет.Код показан ниже:

 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, который я передал.Я хотел бы использовать напи, но не возражаю против любых других предложений.

пожалуйста, прочитайте тему: прием приема напи здесь Я не мог понять, что делать по ссылке выше .....

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Вы можете использовать wireshark для захвата всего сетевого трафика, входящего и выходящего из одного из ваших сетевых интерфейсов. Вы сможете проверить, что пакет был отправлен и действительно ли вы ожидаете его получить. Вы также сможете увидеть, есть ли ответ на ваш пинг.

Что касается вашего вопроса о том, как перехватить ответ ping из вашего модуля, вы можете использовать API netfilter, предлагаемый ядром. Вот хорошая статья для начала использования netfilter.

0 голосов
/ 05 февраля 2012
Пакет

a ping - это просто пакет icmp с кодом 8, а временная метка в его ответе icmp echo (ping reply) просто копирует данные из эхо-запроса icmp и отправляет их обратно, таким образом ping может сказать вам, скольковремя, которое потребовалось для прохождения туда-обратно (сейчас - предыдущее отправленное время)

Я не очень знаком с ядром Linux, но не забудьте рассчитать правильные контрольные суммы ip и icmp

также дляполучая, может быть лучше использовать netfilter

...