def generate_html(self):

        # Header / Title
        np = self.parse
        head = self.head.get_childs()[0]

        head.add_child(Node('title',text = self.get_name()\
                            + " - "  + np.profile_name ))
        body = self.get_body(head)
        self.head.add_child(body)
        hosts = self.get_hosts()

        # Packing Body
        body.add_child(Node(None, text="<h1><b>"+self.get_name()+" - "+\
                            np.profile_name+\
                            "</b></h1>"+"</br></br>" ))
        body.add_child(self.get_nmap_command())

        title = Node(None, None, '<b><h2>Available hosts:</h2></b> <br />')
        body.add_child(title)
        body.add_child(hosts)
        # Services

        title = Node(None, None, '<b><h2>Services:</h2></b> <br />')
        body.add_child(title)
        services = self.get_port_services()
        body.add_child(services)
        body.add_child(self.get_nmap_output())
        return self.head.get_html()
    def __init__(self, parse, filename):
        Export.__init__(self, parse, filename)

        # Head Structure
        self.head = Node('html')
        head = Node('head')
        self.head.add_child(head)
        self.add_style(STYLE)
    def get_nmap_output(self):
        """ Return Node with nmap output """

        div = Node('div', [{'name': 'width', 'value': '60%'}])
        title = Node(None, None, '<b><h2>Nmap outpuut:</h2></b> <br />')
        div.add_child(title)

        pre = Node('pre', [{'name': 'width', 'value': '60%'}])
        output = Node(None, None, self.parse.nmap_output)
        pre.add_child(output)
        div.add_child(pre)

        return div
    def get_port_services(self):
        """
        Returns port and services
        """

        group = Node('div', [{'name': 'width', 'value': '60%'}])

        res = self.get_list_host()

        for host in res:

            title = Node(None, None, "<b>IP:" + host['_ip']['addr'] + "</b>")
            group.add_child(title)

            table = Node('table', [{'name':'border', 'value':'1'}, \
                                   {'name':'width', 'value':'60%'}])
            # ###### Header #########
            for portlist in host['_ports'][0]['port']:
                tr = Node('tr')
                for port in portlist:
                    td = Node('td')
                    td.add_child(Node(None, None, \
                                      port))
                    tr.add_child(td)
            table.add_child(tr)
            # ######################

            for portlist in host['_ports'][0]['port']:
                tr = Node('tr')
                for port in portlist:

                    td = Node('td')
                    td.add_child(Node(None, None, \
                                      portlist[port]))
                    tr.add_child(td)
                table.add_child(tr)

            group.add_child(table)
            group.add_child(BR)
        return group
    def get_hosts(self):

        table = Node('table', [{'name': 'border', 'value': '1'}])

        res = self.get_list_host()

        # Header host table
        tr = Node('tr')
        td = Node('td')
        td.add_child(Node(None, None, "<b>"+\
                          self.get_dname('addr', '_ip')+"</b>"))
        tr.add_child(td)
        td = Node('td')
        td.add_child(Node(None, None, "OS"))
        tr.add_child(td)

        table.add_child(tr)

        for i in res:
            tr = Node('tr')
            # Ip
            td = Node('td')
            td.add_child(Node(None, None, i['_ip']['addr']))
            tr.add_child(td)

            # OS Classes Values
            #for j in i['_osclasses']:
            #for key in j:
            #value =  j[key]
            #td = Node('td')
            #td.add_child(Node(None, None, value))
            #tr.add_child(td)

            # OS Matches Values
            if i.has_key('_osmatch'):
                for key in i['_osmatch']:
                    value = i['_osmatch'][key]
                    td = Node('td')
                    if value is list:
                        value = value[0]['osfamily']
                        print value
                    if not (value is str):
                        value = " - "
                    td.add_child(Node(None, None, value))
                    tr.add_child(td)
                table.add_child(tr)

        return table
 def get_nmap_command(self):
     nmap = Node(None,None, "Nmap command: <b>" + self.parse.nmap_command + \
                 "</b><br /><br />")
     return nmap
 def get_body(self, head):
     # Customize Page
     body = Node('body')
     return body
 def add_style(self, style_t):
     headtag = self.head.get_childs()[0]
     style = Node('style', [{'name': 'type', 'value': 'text/css'}])
     style.add_child(Node(None, None, style_t))
     headtag.add_child(style)
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

from umit.export.Parse import Export
from umit.export.html.Node import Node, STYLE

BR = Node(None, None, "<br />")


class ExportHTML(Export):
    def __init__(self, parse, filename):
        Export.__init__(self, parse, filename)

        # Head Structure
        self.head = Node('html')
        head = Node('head')
        self.head.add_child(head)
        self.add_style(STYLE)

    def add_style(self, style_t):
        headtag = self.head.get_childs()[0]
        style = Node('style', [{'name': 'type', 'value': 'text/css'}])