マルチキャストおよびブロードキャストパケットのパケットデコードを調べた後、決定ロジックを作成する際にいくつかの問題があります。私はここで読むと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;
}
IPv4専用ソリューションやIPv6にも興味がありますか? – sarnold
@sarnold私は現時点ではIPv4ソリューションしか探していません。私はちょうどマルチキャストコードで遊んでいた - すぐに更新されます。 – mcdoomington