在查找多播和廣播數據包的數據包解碼之後,我在創建決策邏輯時遇到了一些困難。從我已閱讀並使用Wireshark的觀察(打量了一番它的來源),這裏是我發現:解碼數據包 - 廣播或多播
廣播:
- 特殊情況下爲0.0.0.0或相當DST地址255.255 .255.255
- 本地廣播,其中IG和LG爲DST地址位設置爲1
- 我不知道什麼子網的數據包是從,所以我不能確定,由於定製子網特定廣播地址。
- 我應該測試,看看目標地址可能是一個合法的廣播地址(即猜測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 2012-02-14 22:28:28
@sarnold我目前只在尋找IPv4解決方案。我只是在玩組播代碼 - 稍後會更新。 – mcdoomington 2012-02-14 22:35:11