2012-02-14 9 views
1

マルチキャストおよびブロードキャストパケットのパケットデコードを調べた後、決定ロジックを作成する際にいくつかの問題があります。私はここで読むとwiresharkのを使用して観察(およびそのソースのいくつかを見て)きたものから、私が見つけたものです:パケットのデコード - ブロードキャストまたはマルチキャスト

放送:0.0.0.0というか、DSTのaddr 255.255ため

  • 専用ケース.255.255
  • ローカルブロードキャストで、dst addrのIGビットとLGビットが1に設定されている
  • パケットがどのサブネットであるかわからないため、カスタムサブネットネッティングによって特定のブロードキャストアドレスを特定できません。
  • は、私がテストしたdest addrが合法的なブロードキャストアドレス(すなわち、推測CIDR?)

これで十分であるかもしれないかどうかを確認する必要がありますか?

マルチキャスト:

  • IGは、ビットを1に設定し、LGは224宛て0
  • DSTアドレスにビットセット - 239サブネット(最初のオクテット)私が持っているもの

これまでのところ?

/* 
* Is packet destined for a multicast address? 
*/ 
int is_multicast(CONNECTION temp) 
{ 

char *save; 
save = strtok(inet_ntoa(temp.ip_dst), "."); 

int firstOct = 0; 
firstOct = atoi(save); 

if((temp.ether_dhost[0] == 1) && 
    (temp.ether_dhost[1] == 0) && 
    ((firstOct >= 224) && 
    (firstOct <= 239))) 
{ 
    return 1; 

} 

return 0; 
} 

/* 
* Is packet destined for a broadcast address? 
*/ 
int is_broadcast(CONNECTION temp) 
{ 

    if ((temp.ether_dhost[0] == 0xFF) && 
     (temp.ether_dhost[1] == 0xFF) && 
     (temp.ether_dhost[2] == 0xFF) && 
     (temp.ether_dhost[3] == 0xFF) && 
     (temp.ether_dhost[4] == 0xFF) && 
     (temp.ether_dhost[5] == 0xFF)) { 
     return 1; // DHCP or ARP 
    } else if ((temp.ether_dhost[0] == 0xFF) && 
      (temp.ether_dhost[1] == 0xFF)) 
     && (temp.ether_dhost[2] != 0xFF) { 
     return 1; // Other local broadcast 
    } 

    return 0; 
} 

+0

IPv4専用ソリューションやIPv6にも興味がありますか? – sarnold

+0

@sarnold私は現時点ではIPv4ソリューションしか探していません。私はちょうどマルチキャストコードで遊んでいた - すぐに更新されます。 – mcdoomington

答えて

0

IPv4の場合、マルチキャストをチェックするには、最初のオクテットのテストで十分です。

(224 <= first octect <= 239) 

ブロードキャストでは、コード内にelse if()ループがありませんでした。最初のif()ループは望ましい結果をもたらすはずです。

+0

答えは他の人のためのものです。これは既知のマルチキャストとブロードキャストを解決するはずです。サブネットを知らなくても他のブロードキャストアドレスを知ることはできないことに注意することが重要です。標準的なネットワークアドレスクラスに基づいて推測することはできますが、最終的には推測です。 – mcdoomington

関連する問題