# File lib/ec2/ec2.rb, line 828
    def describe_security_groups(list=[])
      link = generate_request("DescribeSecurityGroups", hash_params('GroupName', list.to_a))
      request_cache_or_info(:describe_security_groups, link, QEc2DescribeSecurityGroupsParser, @@bench, list.nil? || list.empty?) do |parser|
      result = []
      parser.result.each do |item|
        perms = []
        item.ipPermissions.each do |perm|
          current = {:from_port => perm.fromPort,
                     :to_port => perm.toPort,
                     :protocol => perm.ipProtocol,
                     :groups => [], :ip_ranges => []}
          perm.groups.each do |ngroup|
             current[:groups] << {:group_name => ngroup.groupName, :owner => ngroup.userId}
          end
          perm.ipRanges.each do |cidr_ip|
             current[:ip_ranges] << {:cidr_ip => cidr_ip.cidrIp}
          end
        perms << current
        end
        result << {:aws_owner       => item.ownerId,
                   :aws_group_name  => item.groupName,
                   :aws_description => item.groupDescription,
                   :aws_perms       => perms}
        end
        result
      end
    rescue Exception
      on_exception
    end