在查找多播和广播数据包的数据包解码后,我在创建决策逻辑时遇到了一些困难。从我所看到的和使用wireshark观察(并查看它的一些来源)这里是我发现的:
广播:
这还够吗?
多点传送:
到目前为止我有什么?
/*
* 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 :(得分:0)
在IPv4的情况下,为了检查多播,第一个octect的测试应该是足够的。
(224 <= first octect <= 239)
对于广播,我不理解代码中的else if()
循环。第一个if()
循环应该给出期望的结果。