2016-06-25 13 views
1

特定の条件でパケットを転送するカーネルモジュールを作成しようとしています。今は、インターフェイスで受信したパケットを転送し、別のインターフェイスに転送するハードコードテストを実行しようとしています。このテストでは、eth0の192.168.56.101からのパケットを受信して​​います。このパケットを192.168.57.1​​03のeht1に転送します。 eth0では私のipは192.168.56.102であり、eth1では私のipは192.168.57.1​​02です。私が使用しているトランスポートプロトコルは実験プロトコルです(253)。 NF_INET_PRE_ROUTINGで宛先の変更ip

#define XOR_PROTOCOL 253 

static unsigned int xor_pre_routing_hook(const struct nf_hook_ops *ops, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *)) 
{ 
    struct iphdr *iph; 
    struct xorhdr *ptr; 
    char sip[15]; 
    char sip2[15]; 

    iph = ip_hdr(skb); 

    sprintf(sip, "%pI4", &iph->saddr); 
    sprintf(sip2, "%pI4", &iph->daddr); 

    // Check if is XOR protocol 
    if (iph->protocol == XOR_PROTOCOL) { 
     DEBUG("(Ogirinal) From %pI4 to %pI4.\n", &iph->saddr, &iph->daddr); 

     if (strcmp(sip, "192.168.56.101") == 0 && strcmp(sip2, "192.168.56.255") == 0) { 
      //iph->saddr = inet_addr("192.168.57.102"); 
      iph->daddr = inet_addr("192.168.57.103"); 
      DEBUG("(Modified) From %pI4 to %pI4.\n", &iph->saddr, &iph->daddr); 
      iph = ip_hdr(skb); 
      iph->check = 0; 
      ip_send_check (iph); 
      return NF_ACCEPT; 
     } 
    } 
accept: 
    return NF_ACCEPT; 
} 

このフック:次のコードは、私のコードのほんの単純化された部分です。私はまた、NF_INET_FORWARDにソースと宛先IPを印刷するフックを持っていますが、このフックを通過するパケットはありません。

私はバーチャルボックスで3 linux仮想マシンでテストしていますが、各VMでforwardオプションを有効にしました。このシナリオでパケットを転送することは可能ですか?私が間違ってやっていることと、この問題を解決するために何ができますか?

+0

どのように仮想マシンを相互に接続しますか? Linuxブリッジを使用していますか? – Lin

答えて

0

問題はブロードキャストip 192.168.56.255で、ip 192.168.56.102でパケットが転送されました。

関連する問題