2012-02-14 4 views
1

멀티 캐스트 및 브로드 캐스트 패킷에 대한 패킷 디코딩을 찾은 후 결정 논리를 작성하는 데 어려움을 겪고 있습니다. 0.0.0.0에 대한패킷 디코딩 - 브로드 캐스트 또는 멀티 캐스트

  • 전용 케이스 또는 오히려 DST 요지 255.255 :

    브로드 캐스트 : 나는 읽고 와이어 샤크를 사용하여 관찰 (그리고 소스의 일부 보았다) 것을 여기 내가 찾은 무엇에서 .255.255

  • dst addr에 대한 IG 및 LG 비트가 1로 설정된 로컬 브로드 캐스트
  • 패킷이 어떤 서브넷인지 알 수 없으므로 사용자 지정 서브넷으로 인해 특정 브로드 캐스트 주소를 확인할 수 없습니다.
  • 나는 테스트의 최종 도착 요지는 합법적 인 브로드 캐스트 주소 (즉 추측 CIDR?)

이 충분가 될 수 있는지 확인해야할까요?

멀티 캐스트 :

  • IG이 비트가 1로 설정하고, LG는 224로 향하는 0
  • DST 주소 비트 셋 - 239 서브넷 (제 1 옥텟) I 가진 것을

지금까지?

/* 
* 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의 경우 멀티 캐스트를 확인하기 위해 첫 번째 8 진수에 대한 테스트가 충분해야합니다.

(224 <= first octect <= 239) 

방송의 경우 코드에서 else if() 루프를 이해하지 못했습니다. 첫 번째 if() 루프는 원하는 결과를 제공해야합니다.

+0

답변은 다른 사람들을위한 것입니다. 이것은 알려진 멀티 캐스트와 브로드 캐스트를 해결해야합니다. 서브넷을 알지 못하면 다른 브로드 캐스트 주소를 알 수 없으므로 중요한 점은 표준 네트워크 주소 클래스를 기반으로 추측 할 수 있지만 궁극적으로 추측입니다. – mcdoomington

관련 문제