Example #1
0
    def adjust_ip(self, ip=None):
        """Called to explicitely fixup an associated IP header

    The function adjusts the IP header based on conformance rules 
    and the group address encoded in the IGMP message.
    The rules are:
    1. Send General Group Query to 224.0.0.1 (all systems)
    2. Send Leave Group to 224.0.0.2 (all routers)
    3a.Otherwise send the packet to the group address
    3b.Send reports/joins to the group address
    4. ttl = 1 (RFC 2236, section 2)
    5. send the packet with the router alert IP option (RFC 2236, section 2)
    """
        if ip != None and ip.haslayer(IP):
            if (self.type == 0x11):
                if (self.gaddr == "0.0.0.0"):
                    ip.dst = "224.0.0.1"  # IP rule 1
                    retCode = True
                elif isValidMCAddr(self.gaddr):
                    ip.dst = self.gaddr  # IP rule 3a
                    retCode = True
                else:
                    print "Warning: Using invalid Group Address"
                    retCode = False
            elif ((self.type == 0x17) and isValidMCAddr(self.gaddr)):
                ip.dst = "224.0.0.2"  # IP rule 2
                retCode = True
            elif ((self.type == 0x12) or
                  (self.type == 0x16)) and (isValidMCAddr(self.gaddr)):
                ip.dst = self.gaddr  # IP rule 3b
                retCode = True
            else:
                print "Warning: Using invalid IGMP Type"
                retCode = False
        else:
            print "Warning: No IGMP Group Address set"
            retCode = False
        if retCode == True:
            ip.ttl = 1  # IP Rule 4
            ip.options = [IPOption_Router_Alert()]  # IP rule 5
        return retCode
Example #2
0
  def adjust_ip (self, ip=None):
    """Called to explicitly fixup an associated IP header

    The function adjusts the IP header based on conformance rules 
    and the group address encoded in the IGMP message.
    The rules are:
    1. Send General Group Query to 224.0.0.1 (all systems)
    2. Send Leave Group to 224.0.0.2 (all routers)
    3a.Otherwise send the packet to the group address
    3b.Send reports/joins to the group address
    4. ttl = 1 (RFC 2236, section 2)
    5. send the packet with the router alert IP option (RFC 2236, section 2)
    """
    if ip != None and ip.haslayer(IP):
      if (self.type == 0x11):
        if (self.gaddr == "0.0.0.0"):
          ip.dst = "224.0.0.1"                   # IP rule 1
          retCode = True                     
        elif isValidMCAddr(self.gaddr):
          ip.dst = self.gaddr                    # IP rule 3a
          retCode = True
        else:
          print "Warning: Using invalid Group Address"
          retCode = False
      elif ((self.type == 0x17) and isValidMCAddr(self.gaddr)):
          ip.dst = "224.0.0.2"                   # IP rule 2
          retCode = True
      elif ((self.type == 0x12) or (self.type == 0x16)) and (isValidMCAddr(self.gaddr)):
          ip.dst = self.gaddr                    # IP rule 3b
          retCode = True
      else:
        print "Warning: Using invalid IGMP Type"
        retCode = False
    else:
      print "Warning: No IGMP Group Address set"
      retCode = False
    if retCode == True:
       ip.ttl=1                                  # IP Rule 4
       ip.options=[IPOption_Router_Alert()]      # IP rule 5
    return retCode