Esempio n. 1
0
    def searchscript(cls, name=None, output=None, values=None, neg=False):
        """Search a particular content in the scripts results.

        """
        req = []
        if name is not None:
            if isinstance(name, utils.REGEXP_T):
                req.append(Q("regexp",
                             **{"ports.scripts.id": cls._get_pattern(name)}))
            else:
                req.append(Q("match", **{"ports.scripts.id": name}))
        if output is not None:
            if isinstance(output, utils.REGEXP_T):
                req.append(Q("regexp",
                             **{"ports.scripts.output":
                                cls._get_pattern(output)}))
            else:
                req.append(Q("match", **{"ports.scripts.output": output}))
        if values:
            if name is None:
                raise TypeError(".searchscript() needs a `name` arg "
                                "when using a `values` arg")
            subfield = ALIASES_TABLE_ELEMS.get(name, name)
            if isinstance(values, Query):
                req.append(values)
            elif isinstance(values, str):
                req.append(Q("match",
                             **{"ports.scripts.%s" % subfield: values}))
            elif isinstance(values, utils.REGEXP_T):
                req.append(Q("regexp",
                             **{"ports.scripts.%s" % subfield:
                                cls._get_pattern(values)}))
            else:
                for field, value in values.items():
                    if isinstance(value, utils.REGEXP_T):
                        req.append(Q("regexp",
                                     **{"ports.scripts.%s.%s" % (subfield,
                                                                 field):
                                        cls._get_pattern(value)}))
                    else:
                        req.append(Q("match",
                                     **{"ports.scripts.%s.%s" % (subfield,
                                                                 field):
                                        value}))
        if not req:
            res = Q('nested', path='ports',
                    query=Q('nested', path='ports.scripts',
                            query=Q("exists", field="ports.scripts")))
        else:
            query = cls.flt_and(*req)
            res = Q("nested", path="ports",
                    query=Q("nested", path="ports.scripts", query=query))
        if neg:
            return ~res
        return res
Esempio n. 2
0
def _display_xml_script(script: NmapScript, out: TextIO = sys.stdout) -> None:
    out.write("<script id=%s" % saxutils.quoteattr(script["id"]))
    if "output" in script:
        out.write(" output=%s" % saxutils.quoteattr(script["output"]))
    key = ALIASES_TABLE_ELEMS.get(script["id"], script["id"])
    if key in script:
        out.write(">")
        _display_xml_table_elem(script[key], first=True, out=out)
        out.write("</script>")
    else:
        out.write("/>")
Esempio n. 3
0
def _display_xml_script(s, out=sys.stdout):
    out.write('<script id=%s' % saxutils.quoteattr(s['id']))
    if 'output' in s:
        out.write(' output=%s' % saxutils.quoteattr(s['output']))
    key = ALIASES_TABLE_ELEMS.get(s['id'], s['id'])
    if key in s:
        out.write('>')
        _display_xml_table_elem(s[key], first=True, out=out)
        out.write('</script>')
    else:
        out.write('/>')