2012-02-05 4 views
0

送信しているモジュールを作成しましたが、送信しているパケットがpingパケットであるかどうかわかりません。コードは次のとおりです。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モードhereを私は上記のリンクから何をすべきかを理解し、NTができ.....

+0

あなたはカーネルモジュールを作りましたが、あなたは何が分からないのですか? します ... ? – Carpetsmoker

+0

@Carpetsmoker私は何をしているのか知っています(この時点では送信中です)が、パケットを送信しているかどうかは分かりません。パケットを受信して​​、他の側からping応答があるかどうかを確認しません。 – karan421

答えて

0

pingパケットはそのデータ ICMPエコー応答(ping応答)のタイムスタンプICMPエコー要求からだけデータをコピーして、コード8と、単にICMPパケットであると送り返し、このようピングはどのくらいを伝えることができます私はそれがかもしれないが、Linuxカーネルに精通していないですが、受信するための

も正しいIPとICMPチェックサムを計算するようにしてください

- 時間それは(前へ」sendedでは今の時間)往復にかかりましたnetfilterを使う方が良い

+0

のバージョンを編集するには、チェックサムを計算する方法やカーネルが提供する関数を教えてください..... – karan421

+0

@ karan421は 'icmp_reply()'から 'icmp_push_reply()'を見てみましょう。 'net/ipv4/icmp.c'の中に、私が言ったように、私はLinuxカーネルに精通していません – jackdoe

1

あなたが、あなたの1に出入りするすべてのネットワークトラフィックをキャプチャするwiresharkを使用することができますネットワークインターフェース。パケットが送信されたかどうか、それが実際に期待されていたものかどうかを確認することができます。また、あなたのpingに答えがあるかどうかを見ることができます。

あなたのモジュールからping回答を傍受する方法に関する質問に関しては、カーネルが提供するnetfilter APIを使うことができます。 Here is netfilterを使い始めるのに良い記事です。

+0

私の質問 – karan421