예제 #1
0
    def initComponents(self):
        dataModel = DefaultTableModel(self.regTableData, self.regCols)
        self.regTable = JTable(dataModel)
        scrollPaneReg = JScrollPane()
        scrollPaneReg.getViewport().setView((self.regTable))
        self.regTab.add(scrollPaneReg)
        # self.logTabbedPane.addTab('Registred',self.regTab)
        self.logTabbedPane.insertTab("Registred", None, self.regTab, None, 0)

        dataModel = DefaultTableModel(self.parkTableData, self.parkCols)
        self.parkTable = JTable(dataModel)
        scrollPanePark = JScrollPane()
        scrollPanePark.getViewport().setView((self.parkTable))
        self.parkedTab.add(scrollPanePark)
        # self.logTabbedPane.addTab('Parked',self.parkedTab)
        self.logTabbedPane.insertTab("Parked", None, self.parkedTab, None, 1)

        dataModel = DefaultTableModel(self.bypassTableData, self.bypassCol)
        self.bypassTable = JTable(dataModel)
        scrollPaneBypass = JScrollPane()
        scrollPaneBypass.getViewport().setView((self.bypassTable))
        self.bypassTab.add(scrollPaneBypass)
        # self.logTabbedPane.addTab('Bypassed',self.bypassTab)
        self.logTabbedPane.insertTab("Bypassed", None, self.bypassTab, None, 2)

        self.add(self.logTabbedPane, BorderLayout.CENTER)

        innerBorder = BorderFactory.createTitledBorder('View Logs ')
        outerBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5)
        self.setBorder(
            BorderFactory.createCompoundBorder(outerBorder, innerBorder))
예제 #2
0
    def update_table(self):
        """Updates the table with new data"""

        columns = ["Type", "Action", "Name", "Value"]
        data = []
        for param in self._extender.sm.selected_session.params:
            data.append(param.as_table_row())

        data.append([
            Parameter.type_mapping[Parameter.PARAM_COOKIE],
            Parameter.ACTION_MODIFY, "", ""
        ])
        data_model = DefaultTableModel(data,
                                       columns,
                                       tableChanged=self.tableChanged)
        self.modification_table.setModel(data_model)

        # type combobox
        type_combo = JComboBox(self._types)
        type_column = self.modification_table.getColumnModel().getColumn(0)
        type_column.setCellEditor(DefaultCellEditor(type_combo))
        type_column.setMaxWidth(75)

        # action combobox
        action_combo = JComboBox(self._actions)
        action_column = self.modification_table.getColumnModel().getColumn(1)
        action_column.setCellEditor(DefaultCellEditor(action_combo))
        action_column.setMaxWidth(75)
        action_combo.setSelectedItem("replace")
예제 #3
0
 def gui(self):
   xnode = self.xdoc.getDocumentElement()
   tnode = self.createTree(xnode)  
   # create tree and display
   jt = JTree(tnode)
   jsp = JScrollPane(jt)
   tree_box = Box(BoxLayout.Y_AXIS)
   tree_box.add(jsp)
   tree_box.add(Box.createHorizontalStrut(10))
   headerSorter = TableSorter(DefaultTableModel())
   jtb = JTable(headerSorter)
   headerSorter.addMouseListenerToHeaderInTable(jtb)
   jtb.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
   jsp2 = JScrollPane(jtb)
   table_box = Box(BoxLayout.Y_AXIS)
   table_box.add(jsp2)
   table_box.add(Box.createHorizontalStrut(500))
   mp = JPanel()
   mp.setLayout(BoxLayout(mp,BoxLayout.X_AXIS))
   mp.add(tree_box)
   mp.add(table_box)
   # add listeners
   nsl = NodeSelectionListener(jtb,xnode)
   jt.addTreeSelectionListener(nsl)
   #
   return mp
예제 #4
0
    def __init__(self, view):
        JPanel.__init__(self)
        self.view = view
        self.background = Color.white
        self.layout = BorderLayout()

        self.popup = JPopupMenu()
        self.popup_items = {}

        self.add(self.make_controls(), BorderLayout.SOUTH)

        data, title = self.extract_data()
        self.table = JTable(DefaultTableModel(data, title))

        scroll = JScrollPane(self.table)
        self.add(scroll)

        scroll.addMouseListener(self)
        self.table.tableHeader.addMouseListener(self)
        self.table.addMouseListener(self)

        self.fileChooser = JFileChooser()
        self.fileChooser.setFileFilter(CSVFilter())
        self.fileChooser.setSelectedFile(
            File('%s.csv' % self.view.network.name))
예제 #5
0
    def _createPeerPanel(self):
        label = JLabel("Peers")
        self.uiFunction(label)

        addPeerButton = JButton("Add")
        self.uiFunction(addPeerButton)

        delPeerButton = JButton("Remove")
        self.uiFunction(delPeerButton)

        buttonPanel = JPanel()
        buttonPanel.layout = BoxLayout(buttonPanel, BoxLayout.Y_AXIS)
        buttonPanel.add(addPeerButton)
        buttonPanel.add(delPeerButton)

        peerColNames = ('Host', 'Name', 'Key')
        dataModel = DefaultTableModel(self.peerList, peerColNames)
        peerTable = JTable(dataModel)
        self.uiFunction(peerTable)

        peerPanel = JPanel()
        peerPanel.layout = BoxLayout(peerPanel, BoxLayout.X_AXIS)
        #peerPanel.add(label)
        peerPanel.add(buttonPanel)
        #peerPanel.add(addPeerButton)
        peerPanel.add(JScrollPane(peerTable))
        #peerPanel.add(delPeerButton)

        return peerPanel
예제 #6
0
    def registerExtenderCallbacks(self, callbacks):
        self.callbacks = callbacks
        self.helpers = callbacks.getHelpers()
        self.callbacks.setExtensionName("KkMultiProxy")
        self.PROXY_LIST = []

        self.jPanel = JPanel()
        boxVertical = Box.createVerticalBox()
        boxHorizontal = Box.createHorizontalBox()

        boxHorizontal.add(JButton("File", actionPerformed=self.getFile))
        self.FileText = JTextField("")
        boxHorizontal.add(self.FileText)
        boxVertical.add(boxHorizontal)

        TableHeader = ('IP', 'PORT')
        TableModel = DefaultTableModel(self.PROXY_LIST, TableHeader)
        self.Table = JTable(TableModel)
        boxVertical.add(self.Table)

        boxHorizontal = Box.createHorizontalBox()
        boxHorizontal.add(JButton("Add", actionPerformed=self.addIP))
        boxHorizontal.add(JButton("Delete", actionPerformed=self.deleteIP))
        boxHorizontal.add(JButton("Save", actionPerformed=self.saveIP))
        boxVertical.add(boxHorizontal)

        self.jPanel.add(boxVertical)

        self.callbacks.addSuiteTab(self)
        self.callbacks.registerHttpListener(self)
        return
 def _updateListDuplicates(self):
     # DUPLICATES TABLE
     count = self._getCountValues(self.cmbDuplicates)
     if count == None: return
     dict_list=[]
     for i,j in count.iteritems():
         dict_list.append ((i,j))
     sorted_list = sorted(dict_list,key=lambda x: x[1],reverse=True)
     tableModel = DefaultTableModel(sorted_list, ["Field", "Count"])
     self.tblFilter.setModel(tableModel)
 def cmbLayers_change(self, *args):
     #self.layer = self.view.getLayer(self.cmbLayers.getSelectedItem())
     self.layer = self.cmbLayers.getSelectedItem().getValue()
     self._updateFields()
     self._updateAdvancedFilter()
     #self._updateListValues()
     self.valuesList.getModel().removeAllElements()
     tableModel = DefaultTableModel([["",""]], ["Field", "Count"])
     self.tblFilter.setModel(tableModel)
     self.tblFilter.revalidate()
     self.tblFilter.repaint()
예제 #9
0
    def __private_init__(self,
                         text="Property Editor",
                         columns=None,
                         data=None,
                         empty=None,
                         add_actions=True,
                         actions=None):
        if not actions: actions = []
        if not columns: columns = []
        if data == None: data = []
        if not empty: empty = []

        self._text = text
        self.this = JFrame(text)
        self._table = JTable()
        self._dtm = DefaultTableModel(0, 0)
        self._dtm.setColumnIdentifiers(columns)
        self._table.setModel(self._dtm)
        self._data = data
        for d in data:
            self._dtm.addRow(d)
        self._pane = JScrollPane(self._table)
        self.this.add(self._pane)
        self._empty = empty

        self.this.addWindowListener(self)

        self._dtm.addTableModelListener(lambda _: self._update_model())
        self.this.setLocation(PropertyEditor.NEW_WINDOW_OFFSET,
                              PropertyEditor.NEW_WINDOW_OFFSET)

        if add_actions:
            self._popup = JPopupMenu()
            self._pane.setComponentPopupMenu(self._popup)
            inherits_popup_menu(self._pane)

            self._actions = actions
            self._actions.append(
                ExecutorAction('Remove Selected Rows',
                               action=lambda e: self._remove_row()))
            self._actions.append(
                ExecutorAction('Add New Row',
                               action=lambda e: self._add_row()))

            for action in self._actions:
                self._popup.add(action.menuitem)

        self.this.setForeground(Color.black)
        self.this.setBackground(Color.lightGray)
        self.this.pack()
        self.this.setVisible(True)
        self.this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)

        return self
예제 #10
0
    def __init__(self, extender):
        self._callbacks = extender._callbacks
        self._helpers = extender._callbacks.getHelpers()
        self._callbacks.registerScannerCheck(self)
        # Creamos el contenedor de paneles.
        self.contenedor = JTabbedPane()

        # Campos del sub-tab 1 (mash up)
        self._tab1_nombre = JTextField()
        self._tab1_apellido = JTextField()
        self._tab1_FNacimiento = JTextField()
        self._tab1_mascota = JTextField()
        self._tab1_otro = JTextField()

        self._tab1_feedback_ta = JTextArea('This may take a while . . .')
        self._tab1_feedback_ta.setEditable(False)
        self._tab1_feedback_sp = JScrollPane(self._tab1_feedback_ta)

        self._tab1_minsize = JSlider(4, 16, 6)
        self._tab1_minsize.setMajorTickSpacing(1)
        self._tab1_minsize.setPaintLabels(True)

        self._tab1_maxsize = JSlider(4, 16, 10)
        self._tab1_maxsize.setMajorTickSpacing(1)
        self._tab1_maxsize.setPaintLabels(True)

        self._tab1_specialchars = JTextField('!,@,#,$,&,*')
        self._tab1_transformations = JCheckBox('1337 mode')
        self._tab1_firstcapital = JCheckBox('first capital letter')

        # Campos del sub-tab 2 (redirect)
        self._tab2_JTFa = JTextField()
        self._tab2_JTFaa = JTextField()
        self._tab2_JTFb = JTextField()
        self._tab2_JTFbb = JTextField()
        self._tab2_boton = JButton(' Redirect is Off ',
                                   actionPerformed=self.switch_redirect)
        self._tab2_boton.background = Color.lightGray
        self._tab2_encendido = False

        # Campos del sub-tab 3 (loader)
        self._tab3_urls_ta = JTextArea(15, 5)
        self._tab3_urls_sp = JScrollPane(self._tab3_urls_ta)

        # Campos del sub-tab 4 (headers)
        self._tab4_tabla_model = DefaultTableModel()
        self._tab4_headers_dict = {}

        # Campos del sub-tab 5 (reverse ip)
        self._tab5_target = JTextArea(15, 5)
        self._tab5_target_sp = JScrollPane(self._tab5_target)
예제 #11
0
 def valueChanged(self,evt):
   tnode = evt.getPath().getLastPathComponent()
   xnode_name = tnode.getUserObject()
   tw=TreeWalker(self.xroot)
   xnode=tw.getNextElement(xnode_name)
   if not xnode: return
   if isinstance(xnode,ElementNode):
     headerSorter = TableSorter(NodeTableModel(xnode))
   else:
     headerSorter = TableSorter(DefaultTableModel())
   headerSorter.addMouseListenerToHeaderInTable(self.jtb)
   self.jtb.setModel(headerSorter)
   #self.sizeColumns()
   self.jtb.sizeColumnsToFit(-1)
    def start(self):

        self.frame = JDialog()
        #self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.frame.setLocation(0, 1500)
        self.frame.setSize(1000, 200)

        self.tableDataModel = DefaultTableModel([], [
            "URL", "Code", "Content-Length", "Location", "Mutated Id",
            "Orig Id"
        ])
        self.jtable = JTable(self.tableDataModel)

        scrollPane = JScrollPane(self.jtable)
        self.jtable.setFillsViewportHeight(True)

        messageEditorOrig = self.callbacks.createMessageEditor(None, False)
        messageEditorModified = self.callbacks.createMessageEditor(
            None, False)
        self.editorSplitPane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                          messageEditorOrig.getComponent(),
                                          messageEditorModified.getComponent())
        self.editorSplitPane.setResizeWeight(0.5)

        splitPane = JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane,
                               self.editorSplitPane)
        splitPane.setResizeWeight(0.5)

        class TableSelector(ListSelectionListener):
            def __init__(self, plugin):
                self.plugin = plugin

            def valueChanged(self, event):
                if not event.getValueIsAdjusting():
                    selectedRowIndex = self.plugin.jtable.getSelectedRows()[0]

                    self.plugin._rowSelected(selectedRowIndex)

        self.jtable.getSelectionModel().addListSelectionListener(
            TableSelector(self))

        self.frame.add(splitPane)
        self.frame.setVisible(True)

        self.callbacks.registerHttpListener(self)
        self.callbacks.setExtensionName("Custom Plugin")
        return
 def updateTable(self):
     model = DefaultTableModel()  #self.tblMunicipalities.getModel()
     manager = DALLocator.getDataManager()
     model.addColumn("CODMUN")
     model.addColumn("MUN")
     model.addColumn("FECHA")
     storeParameters = manager.createStoreParameters("H2Spatial")
     database_file = gvsig.getResource(__file__, "data",
                                       "municipalities.mv.db")
     storeParameters.setDynValue("database_file", database_file)
     storeParameters.setDynValue("Table", "Muni")
     storeH2 = manager.openStore("H2Spatial", storeParameters)
     muns = {}
     for f in storeH2:
         if not f.get("CODMUN") in muns.keys():
             muns[f.get("CODMUN")] = [f.get("MUN"), f.get("CODMUN"), '']
     for k in muns.keys():
         model.addRow(muns[k])
     storeH2.dispose()
     self.tblMunicipalities.setModel(model)
예제 #14
0
 def create_table(self, opt, panel):
     self._select_table = {"row": -1, "col": -1}
     table_name = opt['funcopt']['tableName']
     coloNames = opt['funcopt']['coloName']
     ContentData.content_data[table_name] = DefaultTableModel(coloNames, 0)
     self._content_table = swing.JTable(
         ContentData.content_data[table_name])
     self._content_table.setAutoCreateRowSorter(True)
     self._content_table.addMouseListener(
         AddAction(self, opt['type'], opt['funcopt']))
     column_model = self._content_table.getColumnModel()
     for i in xrange(column_model.getColumnCount()):
         column = column_model.getColumn(i)
         if '#' == self._content_table.getColumnName(i):
             column.setPreferredWidth(3)
         else:
             column.setPreferredWidth(200)
     self._content_table.fillsViewportHeight = True
     dtcr = self._content_table.getTableHeader().getDefaultRenderer()
     dtcr.setHorizontalAlignment(swing.SwingConstants.CENTER)
     return swing.JScrollPane(self._content_table)
    def _updateUI(self):
        # Fill dialog
        layers = self.view.getLayers()
        self.cmbLayers.removeAllItems()
        
        for layer in layers:
           #print getIconFromLayer(layer)
           self.cmbLayers.addItem(ListElement(layer.getName(),layer))

        # Advanced dialog
        item = self.cmbLayers.getSelectedItem()
        
        #self.valuesList = self.lstValues
        if item != None and item.getValue()!=None:
            self.layer = item.getValue()
            if self.layer!=None:
                self._updateAdvancedFilter()

        # Duplicates table
        tableModel = DefaultTableModel(None, ["Field", "Count"])
        self.tblFilter.setModel(tableModel)
예제 #16
0
    def __init__(self):
        frame = JFrame("Jython JTable Example")
        frame.setSize(500, 250)
        frame.setLayout(BorderLayout())

        self.tableData = [
            ['Mouse 1', eventNames[0], eventScriptType[0]],
            ['Mouse 2', eventNames[1], eventScriptType[1]],
            ['Mouse 3', eventNames[2], eventScriptType[2]],
            ['Mouse 1 Shift', eventNames[3], eventScriptType[3]],
            ['Mouse 2 Shift', eventNames[4], eventScriptType[4]],
            ['Mouse 3 Shift', eventNames[5], eventScriptType[5]],
            ['Mouse 1 Control', eventNames[6], eventScriptType[6]],
            ['Mouse 2 Control', eventNames[7], eventScriptType[7]],
            ['Mouse 3 Control', eventNames[8], eventScriptType[8]],
        ]
        colNames = ('Script/Event', 'Name', 'Type')
        dataModel = DefaultTableModel(self.tableData, colNames)
        self.table = JTable(dataModel)

        scrollPane = JScrollPane()
        scrollPane.setPreferredSize(Dimension(400, 200))
        scrollPane.getViewport().setView((self.table))

        panel = JPanel()
        panel.add(scrollPane)

        frame.add(panel, BorderLayout.CENTER)

        self.label = JLabel('Hello from Jython')
        frame.add(self.label, BorderLayout.NORTH)
        button = JButton('Save Settings', actionPerformed=self.setText)
        frame.add(button, BorderLayout.SOUTH)
        exitButton = JButton('Exit', actionPerformed=self.myExit)
        frame.add(exitButton, BorderLayout.EAST)

        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
        frame.setVisible(True)
예제 #17
0
    def registerExtenderCallbacks(self, callbacks):

        sys.stdout = callbacks.getStdout()
        self.callbacks = callbacks
        self.helpers = callbacks.getHelpers()
        self.callbacks.setExtensionName("H1 Report Finder")
        callbacks.registerContextMenuFactory(self)
        # Create the tab
        self.tab = JPanel(BorderLayout())

        #Create an empty Table
        self.tableData = []
        self.colNames = ('Vendor', 'Hunter', 'Vulnerability', 'Report', 'Date')
        self.dataModel = DefaultTableModel(self.tableData, self.colNames)
        self.table = Table(self.dataModel)
        self.scrollPane = JScrollPane(self.table)
        self.scrollPane.setPreferredSize(Dimension(500, 500))

        self.tab.add(self.scrollPane, BorderLayout.NORTH)

        callbacks.customizeUiComponent(self.tab)
        callbacks.addSuiteTab(self)
        return
예제 #18
0
 def lstPreviewForms_change(self, event):
     if event.getValueIsAdjusting():
         return
     form = self.lstPreviewForms.getSelectedValue()
     if form == None or form.isEmpty():
         self.tableSetVisible(self.tblPreviewForm, False)
         return
     model = DefaultTableModel()
     model.addColumn("")
     for item in form:
         row = jarray.array((item, ), Object)
         model.addRow(row)
     self.tblPreviewForm.setModel(model)
     renderer = FormItemPreviewCellRenderer()
     renderer.setForm(form)
     editor = FormItemPreviewCellEditor()
     editor.setForm(form)
     model = DefaultTableColumnModel()
     model.addColumn(TableColumn(0, 100, renderer, editor))
     self.tblPreviewForm.setColumnModel(model)
     self.tblPreviewForm.getTableHeader().setUI(None)
     self.tableSetVisible(self.tblPreviewForm, True)
     self.cboForms.setSelectedItem(form)
예제 #19
0
    def extractLinks(self, e):
        self.blankLog()

        #siteMapData only contains first requested entry of a page. Removing that page entry from burp target > site map > content will allow update.
        self.siteMapData = self._callbacks.getSiteMap(None)
        # What links should be extracted? absolute links, relative links, or both?
        self.destAbs = self.destRel = False
        if self.uiLinksAbs.isSelected():
            self.destAbs = True
        if self.uiLinksRel.isSelected():
            self.destRel = True

        # Start building JTable to contain the extracted data
        self.colNames = ('Page', 'HTTPS?', 'Link', 'Description', 'Target',
                         'Rel=', 'Possible vulnerabilities')
        self.tableData = []
        for i in self.siteMapData:
            try:
                self.requestInfo = self._helpers.analyzeRequest(i)
                self.url = self.requestInfo.getUrl()

                if self.scopeOnly() and not (self._callbacks.isInScope(
                        self.url)):
                    continue

                self.urlDecode = self._helpers.urlDecode(str(self.url))

                self.response = i.getResponse()
                if self.response == None:  # if there's no response, there won't be any links :-)
                    continue

                self.responseInfo = self._helpers.analyzeResponse(
                    self.response)
                self.responseOffset = self.responseInfo.getBodyOffset()
                self.responseBody = self._helpers.bytesToString(
                    self.response)[self.responseOffset:]

                keep_looking = True
                while keep_looking:  # there may be multiple links in the response
                    #TODO: known issue: if link does not start with <a href= it won't be detected
                    i = self.responseBody.lower().find('<a href=')

                    #define some variables
                    self.isHttps = None
                    self.Vulnerabilities = ""

                    if i == -1:  # no more <a href's found
                        break
                    self.responseBody = self.responseBody[i + 8:]
                    isAbsLink = isRelLink = False
                    # Looking for either " or ' around links which can be either absolute or relative
                    # This assumes that for a link, quoting is consistent at front and back
                    if self.responseBody[0:8].lower() == '"http://':
                        myOffset = 8
                        isAbsLink = True
                        endQuote = '"'
                        self.isHttps = False
                        self.Vulnerabilities = "Unencrypted transport"
                    elif self.responseBody[0:8].lower() == "'http://":
                        myOffset = 8
                        isAbsLink = True
                        endQuote = "'"
                        self.isHttps = False
                        self.Vulnerabilities = "Unencrypted transport"
                    elif self.responseBody[0:8].lower() == '"mailto:':
                        myOffset = 0
                        isAbsLink = True
                        endQuote = '"'
                        self.isHttps = "(mailto)"
                    elif self.responseBody[0:8].lower() == "'mailto:":
                        myOffset = 0
                        isAbsLink = True
                        endQuote = "'"
                        self.isHttps = "(mailto)"
                    elif self.responseBody[0:7].lower() == "mailto:":
                        myOffset = 0
                        isAbsLink = True
                        endQuote = ">"  #might have space, but might not have space. Assume end will be there for sure.
                        self.isHttps = "(mailto)"
                    elif self.responseBody[0:9].lower() == '"https://':
                        myOffset = 9
                        isAbsLink = True
                        endQuote = '"'
                        self.isHttps = True
                    elif self.responseBody[0:9].lower() == "'https://":
                        myOffset = 9
                        isAbsLink = True
                        endQuote = "'"
                        self.isHttps = True
                    elif self.responseBody[0:1] == '"':
                        myOffset = 1
                        isRelLink = True
                        endQuote = '"'
                        self.isHttps = "(Relative)"
                    else:
                        myOffset = 1
                        isRelLink = True
                        endQuote = "'"
                        self.isHttps = "(Relative)"

                    self.responseBody = self.responseBody[myOffset:]
                    pos = self.responseBody.find(endQuote)
                    self.link = self.responseBody[0:pos]

                    # Looking for </a> end tag
                    # This assumes that the link is correctly ended
                    posEndTag = self.responseBody.lower().find("</a>")
                    self.fullLink = self.responseBody[0:posEndTag]

                    # Looking for > at the end of the <a  tag
                    # This again assumes that the link is correctly ended
                    posEndA = self.responseBody.lower().find(">")
                    self.description = self.responseBody[posEndA + 1:posEndTag]

                    # Looking for a possible target that is described
                    self.target = ""
                    if self.responseBody.lower().find("target") < posEndA:
                        posTarget = self.responseBody.lower().find("target")
                        #search the end of this parameter - might be ' or " or even a space, but it should be directly after the target

                        if self.responseBody[posTarget + 7:posTarget +
                                             8] == '"':
                            endQuote = '"'
                        elif self.responseBody[posTarget + 7:posTarget +
                                               8] == "'":
                            endQuote = "'"
                        else:
                            endQuote = ">"

                        posTargetEnd = self.responseBody[posTarget +
                                                         8:posEndA].lower(
                                                         ).find(endQuote)
                        #TODO rework needed
                        self.target = self.responseBody[posTarget +
                                                        8:posTarget + 8 +
                                                        posTargetEnd]

                    self.rel = ""
                    if self.responseBody.lower().find("rel") < posEndA:
                        posRel = self.responseBody.lower().find("rel")
                        #search the end of this parameter - might be ' or " or even a space, but it should be directly after the target
                        if self.responseBody[posRel + 4:posRel + 5] == '"':
                            endQuote = '"'
                        elif self.responseBody[posRel + 4:posRel + 5] == "'":
                            endQuote = "'"
                        else:
                            endQuote = ">"

                        posRelEnd = self.responseBody[posRel +
                                                      5:posEndA].lower().find(
                                                          endQuote)

                        self.rel = self.responseBody[posRel + 5:posRel + 5 +
                                                     posRelEnd]

                        #Is this link vulnerable to Tabnabbing?
                        if self.target != "" and not isRelLink:
                            if self.rel.lower().find("noopener") == -1:
                                self.Vulnerabilities = self.Vulnerabilities + " Tabnabbing"
                    #if rel= is not defined, but target is, the link is still vulnerable for tabnabbing
                    elif self.target != "" and not isRelLink:
                        self.Vulnerabilities = self.Vulnerabilities + " Tabnabbing"

                    if (isAbsLink and self.destAbs) or (isRelLink
                                                        and self.destRel):
                        # remove white space and extra CR/LF characters
                        self.tableData.append([
                            self.stripURLPort(self.urlDecode),
                            str(self.isHttps),
                            self.lstripWS(self.stripCRLF(self.link)),
                            self.lstripWS(self.stripCRLF(self.description)),
                            self.lstripWS(self.stripCRLF(self.target)),
                            self.lstripWS(self.stripCRLF(self.rel)),
                            self.lstripWS(self.stripCRLF(self.Vulnerabilities))
                        ])

            except:
                print('An error occured during processing of a link [ ' +
                      str(i) + ' ] ignored it and continued with the next.')

        dataModel = DefaultTableModel(self.tableData, self.colNames)
        self.uiLogTable = swing.JTable(dataModel)
        self.uiLogTable.setAutoCreateRowSorter(True)

        self.uiLogPane.setViewportView(self.uiLogTable)
예제 #20
0
    def __init__(self):

        self.rw = 0  # table row
        self.cl = 0  # table column

        # load hidden files list

        self.hiddenFiles = ["zzz"]

        if os.path.exists("hiddenFiles.txt"):
            fp = open("hiddenFiles.txt", "r")
            self.hiddenFiles = fp.readlines()
            fp.close()

        self.hiddenFiles = [f.strip() for f in self.hiddenFiles]
        print self.hiddenFiles

        # These lines setup the basic frame, size and layout
        # the setDefaultCloseOperation so that only the window closes and not TOPSPIN
        self.frame = JFrame("Submit NMR Experimets")
        self.frame.setSize(1200, 440)
        self.frame.setLayout(BorderLayout())
        self.frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)

        # set up the list and the contents of the list
        # the python tuple get converted to a Java vector
        self.data = self.returnCSVlist(self.hiddenFiles)
        self.list = JList(self.data, valueChanged=self.listSelect)
        self.spane = JScrollPane()
        self.spane.setPreferredSize(Dimension(145, 150))
        self.spane.getViewport().setView((self.list))
        panel = JPanel()
        panel.add(self.spane)

        # define buttons
        bpanel = JPanel()
        btnS = JButton('Submit File', actionPerformed=self.listSubmit)
        btnU = JButton('Update List', actionPerformed=self.listUpdate)
        btnHideFile = JButton('Hide File', actionPerformed=self.listHideFile)
        btnShowAllFiles = JButton('Show All Files',
                                  actionPerformed=self.listShowAllFiles)

        # label displaying CSV file selected
        self.label = JLabel('Selected File', JLabel.CENTER)

        # label to display warnings and confirm expriments submitted
        self.statusLabel = JLabel('Status', JLabel.CENTER)

        # Create table to display csv file
        self.tableData = []

        for r in range(18):
            self.tableData.append([
                "",
            ] * len(JBrukerSubmit.colHeads))

        colNames = JBrukerSubmit.colHeads
        self.dataTableModel = DefaultTableModel(self.tableData, colNames)
        self.table = JTable(self.dataTableModel,
                            keyTyped=self.tableChangedCB,
                            mouseClicked=self.tableMouseClicked)

        # set all columns to uneditable except Holder column
        # print dir(self.table)
        # self.table.getColumn(0).setEditable(False)
        # self.table.getColumn(2).setEditable(False)
        # self.table.getColumn(3).setEditable(False)
        # self.table.getColumn(4).setEditable(False)
        # self.table.getColumn(5).setEditable(False)
        # self.table.getColumn(6).setEditable(False)

        # self.table = JTable(self.dataTableModel,
        #                     keyPressed=self.tableKeyPressedCB)

        self.scrollPaneTable = JScrollPane()
        self.scrollPaneTable.setPreferredSize(Dimension(900, 300))

        self.scrollPaneTable.getViewport().setView((self.table))

        panelTable = JPanel()
        panelTable.add(self.scrollPaneTable)

        # create text field to get carousel starting position
        self.carouselLabel = JLabel("Carousel Position", JLabel.CENTER)
        self.carouselStartingPosition = JTextField(
            '1', 13, keyPressed=self.checkCarouselNumber)

        # add widgets to do with manupulating csv list in FlowLayout Mode
        panelList = JPanel()
        panelList.setLayout(FlowLayout())
        panelList.setPreferredSize(Dimension(170, 200))

        # set preferred size of buttons
        btnU.setPreferredSize(Dimension(140, 20))
        btnS.setPreferredSize(Dimension(140, 20))
        btnHideFile.setPreferredSize(Dimension(140, 20))
        btnShowAllFiles.setPreferredSize(Dimension(140, 20))

        self.carouselLabel.setPreferredSize(Dimension(140, 20))
        self.carouselStartingPosition.setPreferredSize(Dimension(170, 20))

        panelList.add(btnU)
        panelList.add(panel)
        panelList.add(btnHideFile)
        panelList.add(btnShowAllFiles)
        panelList.add(JSeparator(JSeparator.HORIZONTAL),
                      BorderLayout.LINE_START)
        panelList.add(self.carouselLabel)
        panelList.add(self.carouselStartingPosition)
        panelList.add(btnS)

        self.panelLabel = JPanel()
        self.panelLabel.add(self.label)
        self.standardBackgroundColor = self.panelLabel.getBackground()

        # put status label in a panel so that background color can be changed
        self.panelStatusLabel = JPanel()
        self.panelStatusLabel.add(self.statusLabel)

        # add widgets to frame
        self.frame.add(self.panelLabel, BorderLayout.NORTH)
        self.frame.add(panelList, BorderLayout.WEST)
        self.frame.add(panelTable, BorderLayout.CENTER)
        self.frame.add(self.panelStatusLabel, BorderLayout.SOUTH)

        self.frame.setVisible(True)
예제 #21
0
 def __init__(self,jtb,xroot):
   self.jtb = jtb
   self.xroot = xroot
   self.empty_model = DefaultTableModel()
    def output(self, value):
        eingabe = value.getString()
        if eingabe == "Lexikon":
            # Falls "Lexikon" an den Clienten übergeben wird, wird die GUI geöffnet,
            # in der man deutsche Wörter eingeben kann, die einem dann auf Englisch
            # vorgelesen werden.
            def change_text(event):
                text = feld.getText()
                x = suche(text)
                self.send(x)
                frame.visible = False

            frame = JFrame(
                'Woerterbuch',
                defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
                size=(380, 350),
            )
            frame.setLayout(None)
            frame.visible = True
            hintergrund = ImageIcon("Hintergrund.jpg")
            hintergrundlabel = JLabel(hintergrund)
            frame.setContentPane(hintergrundlabel)

            uebersetzerlabel = JLabel()
            uebersetzerlabel.setForeground(Color(025, 025, 112))
            uebersetzerlabel.setText(
                "<html><font size=+1>Welches Wort soll ich uebersetzen?</font></html>"
            )
            uebersetzerlabel.setBounds(10, 20, 500, 50)
            frame.add(uebersetzerlabel)

            feld = JTextField()
            feld.setText("")
            feld.setBounds(20, 80, 300, 25)
            frame.add(feld)

            button = JButton('Uebersetzen',
                             actionPerformed=change_text,
                             size=(10, 20))
            button.setBounds(20, 110, 300, 30)
            frame.add(button)

        if eingabe == "neue Lektion":
            # Falls dem Clienten "neue Lektion" übergeben wird, öffnet er er die
            # GUI für das Verwalten der Lektionen
            frame = JFrame('Lektion erstellen',
                           defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
                           size=(1000, 1000))
            frame.setLayout(None)

            def auflisten_in(ort):
                font = Font("Verdana", Font.BOLD, 15)
                liste_mit_Lektionen = []
                with open(pfad, "r") as f:
                    for line in f:
                        liste_mit_Lektionen.append(line.strip())
                liste_mit_Lektionen.sort()
                text = ""
                for lektion in liste_mit_Lektionen:
                    text += lektion
                    text += "\n"
                ort.setText(text)
                ort.setFont(font)
                frame.setLayout(None)
                uebersichtLabel = JLabel()

            def uebersetzen(event):
                frage = feld_frage.getText()
                x = suche(frage)
                feld_frage.setText(x)
                liste = []
                with open(pfad, "r") as lektionen:
                    for lektion in lektionen:
                        if "nachgeschlagen" in lektion:
                            liste.append(lektion)
                if liste:
                    name = liste[-1]
                    words = []
                    sql = "SELECT deutsch, englisch, symbol FROM " + name
                    zeile = stmt.executeQuery(sql)
                    while zeile.next():
                        d = zeile.getString("deutsch")
                        e = zeile.getString("englisch")
                        symb = zeile.getString("symbol")
                        words.append((d, e, symb))
                    if len(words) < 50:
                        sql = "INSERT INTO " + name + " (deutsch, englisch, symbol)  VALUES(?,?,?);"
                        pstmt = conn.prepareStatement(sql)
                        pstmt.setString(1, frage)
                        pstmt.setString(2, x)
                        pstmt.setString(3, "X")
                        pstmt.executeUpdate()
                    else:
                        namensteile = name.split("_")
                        nummer = int(namensteile[1].strip()) + 1
                        name = "nachgeschlagen_" + str(nummer)
                        test = ""
                        with open(pfad, "r") as f:
                            for line in f:
                                test += line
                        if not name in test:
                            with open(pfad, "a") as f:
                                f.write(name + "\n")
                        sql = "CREATE TABLE " + name + " (deutsch text, englisch text, symbol text);"
                        stmt.execute(sql)
                        sql = "INSERT INTO " + name + " (deutsch, englisch, symbol)  VALUES(?,?,?);"
                        pstmt = conn.prepareStatement(sql)
                        pstmt.setString(1, frage)
                        pstmt.setString(2, x)
                        pstmt.setString(3, "X")
                        pstmt.executeUpdate()
                else:
                    name = "nachgeschlagen_1"
                    test = ""
                    with open(pfad, "r") as f:
                        for line in f:
                            test += line
                    if not name in test:
                        with open(pfad, "a") as f:
                            f.write(name + "\n")
                    sql = "CREATE TABLE " + name + " (deutsch text, englisch text, symbol text);"
                    stmt.execute(sql)
                    sql = "INSERT INTO " + name + " (deutsch, englisch, symbol)  VALUES(?,?,?);"
                    pstmt = conn.prepareStatement(sql)
                    pstmt.setString(1, frage)
                    pstmt.setString(2, x)
                    pstmt.setString(3, "X")
                    pstmt.executeUpdate()
                auflisten_in(uebersicht)

            def delete(event):
                name = feld.getText()
                print name
                print self.geladen
                if name == self.geladen:
                    count = 0
                    while tabelle.getValueAt(count, 0) != None:
                        tabelle.setValueAt(None, count, 0)
                        tabelle.setValueAt(None, count, 1)
                        count += 1
                stmt.execute("DROP TABLE " + name + ";")
                lektionen = []
                with open(pfad, "r") as f:
                    for line in f:
                        lektion = line.strip()
                        if not name == lektion:
                            lektionen.append(lektion)
                with open(pfad, "w") as f:
                    for lektion in lektionen:
                        f.write(lektion + "\n")
                auflisten_in(uebersicht)

            def laden(event):
                name = feld.getText()
                self.geladen = name
                sql = "SELECT deutsch, englisch FROM " + name
                results = stmt.executeQuery(sql)
                count = 0
                while results.next():
                    d = results.getString("deutsch")
                    e = results.getString("englisch")
                    tabelle.setValueAt(d, count, 0)
                    tabelle.setValueAt(e, count, 1)
                    count += 1
                while tabelle.getValueAt(count, 0) != None:
                    tabelle.setValueAt(None, count, 0)
                    tabelle.setValueAt(None, count, 1)
                    count += 1

            def erstelle_Lektionstabelle(event):
                reihen = []
                for i in range(0, 50):
                    deutsch = tabelle.getValueAt(i, 0)
                    englisch = tabelle.getValueAt(i, 1)
                    if deutsch != None:
                        symbol = "X"
                        reihen.append([deutsch, englisch, symbol])
                    else:
                        break
                z = 0
                name = feld.getText()
                sql = "CREATE TABLE " + name + " (deutsch text, englisch text, symbol text);"
                try:
                    stmt.execute(sql)
                except SQLError:
                    stmt.execute("DROP TABLE " + name + ";")
                    stmt.execute(sql)
                for reihe in reihen:
                    print(reihe)
                    deutsch = reihe[0]
                    englisch = reihe[1]
                    symbol = reihe[2]
                    sql = "INSERT INTO " + name + " (deutsch, englisch, symbol)  VALUES(?,?,?);"
                    pstmt = conn.prepareStatement(sql)
                    pstmt.setString(1, deutsch)
                    pstmt.setString(2, englisch)
                    pstmt.setString(3, symbol)
                    pstmt.executeUpdate()
                test = ""
                with open(pfad, "r") as f:
                    for line in f:
                        test += line
                if not name in test:
                    with open(pfad, "a") as f:
                        f.write(name + "\n")
                self.send(name)
                frame.setVisible(False)

            frame = JFrame('Vokabel Listen',
                           defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
                           size=(1000, 1000))
            frame.setLayout(None)
            label_enter = JLabel()
            label_enter.setText(
                "<html><font size=+0.5 color = 000000>Bitte vor dem Speichern<br>die Entertaste bedienen</font></html>"
            )
            label_enter.setBounds(20, 720, 250, 50)
            uebersichtLabel = JLabel()
            uebersichtLabel.setText(
                "<html><font size=+1 color=#191970>Bereits vorhandene Lektionen:</font></html>"
            )
            uebersichtLabel.setBounds(450, 230, 250, 50)
            uebersicht = JTextArea()
            uebersicht.editable = False
            uebersicht_scroll = JScrollPane(uebersicht)
            uebersicht_scroll.viewport.view = uebersicht
            uebersicht_scroll.setBounds(450, 300, 250, 380)
            auflisten_in(uebersicht)
            button = JButton('Lektion speichern/Lektion reseten',
                             actionPerformed=erstelle_Lektionstabelle,
                             size=(10, 20))
            button.setBounds(20, 700, 300, 30)
            button_laden = JButton('vorhandene Lektion laden',
                                   actionPerformed=laden,
                                   size=(10, 20))
            button_laden.setBounds(20, 110, 210, 30)
            button_delete = JButton("Lektion entfernen",
                                    actionPerformed=delete)
            button_delete.setBounds(20, 140, 210, 30)
            hintergrund = ImageIcon("Hintergrund.jpg")
            pnl = JPanel()
            hintergrundlabel = JLabel(hintergrund)
            frame.setContentPane(hintergrundlabel)
            lektionsnamensLabel = JLabel()
            lektionsnamensLabel.setForeground(Color(025, 025, 112))
            lektionsnamensLabel.setText(
                "<html><font size=+1>Hier bitte Namen der Lektion eingeben<br>(Nur ein Wort lang)</font></html>"
            )
            lektionsnamensLabel.setBounds(10, 20, 500, 50)
            frame.add(lektionsnamensLabel)
            feld = JTextField()
            feld.setText("")
            feld.setBounds(20, 80, 210, 25)
            frame.add(feld)
            column_names = [
                "<html><font size=+1 color=#191970><b>Deutsch</b></font></html>",
                "<html><font size=+1 color=#191970><b>Englisch</b></font></html>"
            ]
            table_model = DefaultTableModel(column_names, 50)
            tabelle = JTable(table_model)
            lektionsnamensLabel.setForeground(Color(025, 025, 112))
            scrollbar = JScrollPane(tabelle)
            scrollbar.viewport.view = tabelle
            scrollbar.setVerticalScrollBarPolicy(
                scrollbar.VERTICAL_SCROLLBAR_ALWAYS)
            scrollbar.setVisible(True)
            tabelle.setVisible(True)
            scrollbar.setBounds(20, 190, 300, 490)
            feld_frage = JTextField()
            feld_frage.setText("")
            feld_frage.setBounds(450, 30, 300, 50)
            uebersetzerlabel = JLabel()
            uebersetzerlabel.setForeground(Color(025, 025, 112))
            uebersetzerlabel.setText(
                "<html><font size=+1>Hier kannst Du ein deutsches Wort eintragen,<br>dass ich fuer Dich nachschlage</font></html>"
            )
            uebersetzerlabel.setBounds(450, 80, 500, 50)
            button_uebersetzen = JButton('Uebersetzen',
                                         actionPerformed=uebersetzen,
                                         size=(10, 20))
            button_uebersetzen.setBounds(450, 130, 300, 30)
            frame.add(button_uebersetzen)
            frame.add(uebersetzerlabel)
            frame.add(feld_frage)
            frame.add(feld)
            frame.add(scrollbar)
            frame.add(button)
            frame.add(button_laden)
            frame.setVisible(True)
            frame.add(uebersicht_scroll)
            frame.add(uebersichtLabel)
            frame.add(button_delete)
            frame.add(label_enter)
        elif eingabe == "alle Lektionen auflisten":
            # Hier erstellt der Client eine dynamische Grammatik
            # mit den vorhandenen Lektionen, die man sich abfragen lassen kann
            # und gibt diese wieder an DialogOS zurück.
            # Außerdem wird der Feedback Frame geöffnet.
            def auflisten_in2(ort):
                font = Font("Verdana", Font.BOLD, 15)
                liste_mit_Lektionen = []
                with open(pfad, "r") as f:
                    for line in f:
                        liste_mit_Lektionen.append(line.strip())
                        liste_mit_Lektionen.sort()
                text = ""
                for lektion in liste_mit_Lektionen:
                    text += lektion
                    text += "\n"
                ort.setText(text)
                ort.setFont(font)

            frame_feedback.setVisible(True)
            auflisten_in2(uebersicht2)
            grammatik = ""
            grammatik = "root $NamevonLektion;\n"
            grammatik += "$NamevonLektion = "
            with open(pfad, "r") as f:
                z = 0
                for line in f:
                    if z == 0:
                        if not "_" in line:
                            grammatik += line
                        else:
                            zeile = line.split("_")
                            grammatik += zeile[0] + " "
                            grammatik += zeile[1].strip()
                    else:
                        if not "_" in line:
                            grammatik += "|" + line
                        else:
                            zeile = line.split("_")
                            grammatik += "|" + zeile[0] + " "
                            grammatik += zeile[1].strip()
                    if line != "\n":
                        z += 1
            grammatik += ";"
            self.send(grammatik)
        elif "sende" in eingabe:
            # DialogOS sagt dem Clienten, welche Lektion der User abgefragt
            # werden möchte. Der Client ließt dann die entsprechende Lektion
            # aus der Datenbank aus und gibt eine Liste mit 2 Listen zurück.
            # In der ersten Liste befinden sich die deutschen Bedeutungen, der
            # noch nicht gewussten Wörter, in der 2. Liste die englsichen Bedeutungen.
            # Falls alle Wörter bereits gekonnt wurden, wird stattdessen eine entsprechende
            # Anmerkung an DialogOS geschickt und DialogOS informiert den User darüber.
            z = 0
            if "nachgeschlagen" in eingabe:
                bestandteile = eingabe.split()
                name = bestandteile[1] + "_" + bestandteile[2]
            else:
                name = eingabe.split()[1]
            sql = "SELECT deutsch, englisch, symbol FROM " + name
            vokabelliste = stmt.executeQuery(sql)
            deutsch = []
            englisch = []
            symbol = []
            while (vokabelliste.next()):
                deutsch.append(vokabelliste.getString("deutsch"))
                englisch.append(vokabelliste.getString("englisch"))
                symbol.append(vokabelliste.getString("symbol"))

            indices = range(0, len(deutsch))
            random.shuffle(indices)
            vokabeln = [[], []]
            for index in indices:
                d = deutsch[index]
                e = englisch[index]
                s = symbol[index]
                if s == "X":
                    vokabeln[0].append(d)
                    vokabeln[1].append(e)
            if vokabeln[0]:
                self.send(vokabeln)
            else:
                self.send([
                    "Du kannst diese Lektion schon komplett. Wenn Du sie wieder abgefragt werden willst, resete sie bitte unter Wokabeln verwalten."
                ])
        else:
            # Dieser Teil des Codes wird während der Abfrage ausgeführt.
            # Nach jeder neuen Vokabel wird dann in ein Feld im Feedback
            # Frame die deutsche, die englische Vokabel und ein Symbol angezeigt,
            # welches einen darüber informiert, ob man die Vokabel wusste, oder nicht.
            # (O für gewusst und X für nicht gewusst)
            nametext = eingabe.split(":")
            name = nametext[0]
            text = nametext[1]
            feld_feedback.setText(text)
            zeilen = text.split("\n")
            symb = zeilen[-2].split("\t")[-1]
            d = zeilen[-2].split("\t")[-3]
            print d
            sql = "UPDATE " + name + " SET symbol = ? WHERE deutsch = ?"
            pstmt = conn.prepareStatement(sql)
            pstmt.setString(1, symb)
            pstmt.setString(2, d)
            pstmt.executeUpdate()
예제 #23
0
    def _initializeGui(self, callbacks):
        tab = JPanel()

        jLabel1 = JLabel("Original Hash:")
        jLabel2 = JLabel("Original message:")
        jLabel3 = JLabel("Message to append:")
        jLabel5 = JLabel("Max key length:")
        jTextField1 = JTextField("")
        jTextField2 = JTextField("")
        jTextField3 = JTextField("")
        jTextField4 = JTextField("128")
        jLabel4 = JLabel("Hashing functions")
        jCheckBox1 = JCheckBox("MD4")
        jCheckBox2 = JCheckBox("MD5")
        jCheckBox3 = JCheckBox("SHA1")
        jCheckBox4 = JCheckBox("SHA256")
        jCheckBox5 = JCheckBox("SHA512")
        jCheckBox1.setEnabled(False)
        jCheckBox2.setEnabled(False)
        jCheckBox3.setEnabled(False)
        jCheckBox4.setEnabled(False)
        jCheckBox5.setEnabled(False)
        jScrollPane1 = JScrollPane()
        jTable1 = JTable()
        jButton1 = JButton("Generate", actionPerformed=self.generate_attack)
        jButton1.setEnabled(False)
        jButton2 = JButton("Copy messages", actionPerformed=self.copy_messages)
        jButton3 = JButton("Copy hashes", actionPerformed=self.copy_hashes)

        self._tab = tab
        self._textfields = {
            "original_hash": jTextField1,
            "original_msg": jTextField2,
            "append_msg": jTextField3,
            "max_key_len": jTextField4,
        }
        self._checkboxes = {
            md4: jCheckBox1,
            md5: jCheckBox2,
            sha1: jCheckBox3,
            sha256: jCheckBox4,
            sha512: jCheckBox5,
        }

        self._table = jTable1
        self._extensions = {}
        self._hashes, self._messages = [], []

        # Hash field change event
        jTextField1.getDocument().addDocumentListener(
            HashChangeListener(self._checkboxes,
                               self._textfields['original_hash'], jButton1))

        # Table columns
        jTable1.setModel(
            DefaultTableModel([], ["#", "Type", "New Message", "Hash"]))
        jScrollPane1.setViewportView(jTable1)
        # Table column width
        jTable1.getColumnModel().getColumn(0).setMaxWidth(50)
        jTable1.getColumnModel().getColumn(1).setMaxWidth(60)

        layout = GroupLayout(tab)
        tab.setLayout(layout)

        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup().addGap(24, 24, 24).addGroup(
                    layout.createParallelGroup(
                        GroupLayout.Alignment.TRAILING).addComponent(jLabel5).
                    addComponent(jLabel1).addComponent(jLabel2).
                    addComponent(jLabel3)).addPreferredGap(
                        LayoutStyle.ComponentPlacement.RELATED).addGroup(
                            layout.createParallelGroup(
                                GroupLayout.Alignment.LEADING).addComponent(
                                    jTextField3, GroupLayout.DEFAULT_SIZE, 425,
                                    32767).addComponent(jTextField2).
                            addComponent(jTextField1).addGroup(
                                layout.createSequentialGroup().addComponent(
                                    jTextField4, GroupLayout.PREFERRED_SIZE,
                                    88, GroupLayout.PREFERRED_SIZE).addGap(
                                        0, 0, 32767))).addGap(30, 30, 30).
                addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.LEADING).
                    addGroup(layout.createSequentialGroup(
                    ).addComponent(jCheckBox1).addPreferredGap(
                        LayoutStyle.ComponentPlacement.RELATED
                    ).addComponent(jCheckBox2).addPreferredGap(
                        LayoutStyle.ComponentPlacement.RELATED
                    ).addComponent(jCheckBox3).addPreferredGap(
                        LayoutStyle.ComponentPlacement.RELATED
                    ).addComponent(jCheckBox4).addPreferredGap(
                        LayoutStyle.ComponentPlacement.RELATED).addComponent(
                            jCheckBox5)).addComponent(jLabel4).addGroup(
                                layout.createSequentialGroup().addComponent(
                                    jButton1).addPreferredGap(
                                        LayoutStyle.ComponentPlacement.RELATED
                                    ).addComponent(jButton3).addPreferredGap(
                                        LayoutStyle.ComponentPlacement.RELATED
                                    ).addComponent(jButton2))).addGap(
                                        167, 167,
                                        167)).addComponent(jScrollPane1))
        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup().addGap(26, 26, 26).addGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.BASELINE).
                    addComponent(jLabel1).addComponent(
                        jTextField1, GroupLayout.PREFERRED_SIZE,
                        GroupLayout.DEFAULT_SIZE,
                        GroupLayout.PREFERRED_SIZE).addComponent(jLabel4)).
                addPreferredGap(
                    LayoutStyle.ComponentPlacement.RELATED).addGroup(
                        layout.createParallelGroup(
                            GroupLayout.Alignment.BASELINE).addComponent(
                                jTextField2, GroupLayout.PREFERRED_SIZE,
                                GroupLayout.DEFAULT_SIZE,
                                GroupLayout.PREFERRED_SIZE).
                        addComponent(jLabel2).addGroup(
                            layout.createParallelGroup(
                                GroupLayout.Alignment.BASELINE).addComponent(
                                    jCheckBox2).addComponent(jCheckBox3).
                            addComponent(jCheckBox1).addComponent(jCheckBox4).
                            addComponent(jCheckBox5))).addPreferredGap(
                                LayoutStyle.ComponentPlacement.RELATED).
                addGroup(
                    layout.createParallelGroup(
                        GroupLayout.Alignment.BASELINE).addComponent(
                            jTextField3, GroupLayout.PREFERRED_SIZE,
                            GroupLayout.DEFAULT_SIZE,
                            GroupLayout.PREFERRED_SIZE).addComponent(jLabel3)
                ).addPreferredGap(
                    LayoutStyle.ComponentPlacement.RELATED).addGroup(
                        layout.createParallelGroup(
                            GroupLayout.Alignment.BASELINE).
                        addComponent(jLabel5).addComponent(
                            jTextField4, GroupLayout.PREFERRED_SIZE,
                            GroupLayout.DEFAULT_SIZE,
                            GroupLayout.PREFERRED_SIZE).addComponent(jButton2).
                        addComponent(jButton3).addComponent(jButton1)).addGap(
                            13, 13, 13).addComponent(jScrollPane1,
                                                     GroupLayout.DEFAULT_SIZE,
                                                     971, 32767)))

        callbacks.customizeUiComponent(tab)
        callbacks.addSuiteTab(self)
예제 #24
0
class UI:
    global dssFile
    mainWindow = ListSelection.getMainWindow()
    dssFileName = mainWindow.getDSSFilename()
    dssFile = HecDss.open(dssFileName)
    global frame, lbl_close, list_locations, chckbxShowLocationPlot, eventsTable, dm_events, dm_meltRate
    global swePaths, precipPaths, tempPaths, bList, meltRateTable, startDateField, endDateField

    frame = JFrame("Snow PAC - Parameter Aggregator & Calculator")
    #     frame.setUndecorated(True)
    frame.setBackground(Color.WHITE)
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
    frame.setBounds(100, 100, 1110, 775)

    contentPane = JPanel()
    contentPane.setBackground(Color.WHITE)
    contentPane.setBorder(EmptyBorder(5, 5, 5, 5))

    frame.setContentPane(contentPane)
    contentPane.setLayout(None)

    class MouseListener(MouseAdapter):
        #       @Override
        def mousePressed(self, e):
            global xx
            global xy
            xx = e.getX()
            xy = e.getY()

    class MouseMotionListener(MouseMotionAdapter):
        #       @Override
        def mouseDragged(self, arg0):
            x = arg0.getXOnScreen()
            y = arg0.getYOnScreen()
            frame.setLocation(x - xx, y - xy)

    mL = MouseListener()
    mML = MouseMotionListener()
    contentPane.addMouseListener(mL)
    contentPane.addMouseMotionListener(mML)

    if os.path.exists(img_dir + "/button.jpg"):
        btnIcon = ImageIcon(img_dir + "/button.jpg")
    else:
        btnIcon = ImageIcon(img_dir2 + "/button.jpg")

    scrollPane_events = JScrollPane()
    scrollPane_events.setBounds(270, 372, 403, 263)
    contentPane.add(scrollPane_events)

    scrollPane_locations = JScrollPane()
    scrollPane_locations.setBounds(270, 49, 403, 203)
    contentPane.add(scrollPane_locations)

    class deleteAction(AbstractAction):
        def actionPerformed(self, deleteEvent):
            # Get selected Rows and reverse list. Removes each row in list one at a time.
            # List is Reversed using [::-1], so it doesn't mess up the ordering as it deletes through the loop.
            for row in meltRateTable.getSelectedRows()[::-1]:
                dm_meltRate.removeRow(row)
                dm_meltRate.insertRow(row, [None, None])

    scrollPane_table = JScrollPane()
    scrollPane_table.setBounds(708, 49, 338, 586)
    contentPane.add(scrollPane_table)

    meltRateTable = JTable()
    scrollPane_table.setViewportView(meltRateTable)
    scrollPane_table.setBorder(LineBorder(Color(1, 1, 1), 2, True))
    meltRateTable.setFont(Font("Tahoma", Font.PLAIN, 11))

    columns = ("ATI (Deg F-Day)", "Meltrate (Inches/Deg F-Day)")
    data = []
    datarows = 100
    data.append([0, None])
    for i in range(datarows):
        data.append([None, None])
    dm_meltRate = DefaultTableModel(data, columns)

    meltRateTable.setModel(dm_meltRate)

    meltRateTable.getColumnModel().getColumn(0).setPreferredWidth(154)
    meltRateTable.getColumnModel().getColumn(1).setResizable(False)
    meltRateTable.getColumnModel().getColumn(1).setPreferredWidth(154)
    meltRateTable.setCellSelectionEnabled(True)

    #    Delete data from the table using the Delete Key.
    #     meltRateTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    inputMap = meltRateTable.getInputMap(JComponent.WHEN_FOCUSED)
    actionMap = meltRateTable.getActionMap()

    deleteActionStr = "delete"
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
                 deleteActionStr)
    actionMap.put(deleteActionStr, deleteAction())

    #     jLabelStartDate = JLabel()
    #     jLabelStartDate.setText("Optional Start Date:")
    #     jLabelStartDate.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.")
    #     jLabelStartDate.setBounds(420, 263, 120, 20);
    #     jLabelStartDate.setFont( Font("Tahoma", Font.PLAIN, 12))
    #     contentPane.add(jLabelStartDate)
    #
    #     startDateField = CalendarField();
    #     jLabelStartDate.setLabelFor(startDateField);
    #     startDateField.setMargin(Insets(0, 4, 0, 0));
    #     startDateField.setBounds(540, 263, 118, 22);
    #     startDateField.setFont(Font("Tahoma", Font.PLAIN, 12));
    #     startDateField.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.")
    #     contentPane.add(startDateField);
    #
    #     jLabelEndDate = JLabel()
    #     jLabelEndDate.setText("Optional End Date:")
    #     jLabelEndDate.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.")
    #     jLabelEndDate.setBounds(420, 293, 120, 20);
    #     jLabelEndDate.setFont( Font("Tahoma", Font.PLAIN, 12))
    #     contentPane.add(jLabelEndDate)
    #
    #     endDateField = CalendarField();
    #     jLabelEndDate.setLabelFor(endDateField);
    #     endDateField.setMargin(Insets(0, 4, 0, 0));
    #     endDateField.setBounds(540, 293, 118, 22);
    #     endDateField.setFont(Font("Tahoma", Font.PLAIN, 12));
    #     endDateField.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.")
    #     contentPane.add(endDateField);

    def recalcBtnSelect(event):
        global swePaths, precipPaths, tempPaths
        selectedLocations = list_locations.getSelectedValuesList()
        swePaths, precipPaths, tempPaths = Locations.getSelectedLocations(
            selectedLocations)
        pathsNoDPart, sList, pList, tList = CalcAtiMelt.processPathsLists(
            swePaths, precipPaths, tempPaths)
        dList = CalcAtiMelt.processPathsDatesList(pathsNoDPart)
        aList, mList = CalcAtiMelt.calcATIMelt(selectedLocations, sList, pList,
                                               tList, dList)

        # Write Melt-Cum and ATI Locations to DSS.
        CalcAtiMelt.writeAtiMelt(selectedLocations, dList, aList, mList)

        # Plot Locations if checkbox.selected = True.
        if chckbxShowLocationPlot.selected is True:
            #             print '\nPLOT TEAM ACTIVATE'
            PlotAtiMelt.plotAtiMelt(selectedLocations)

        # Use optional specified dates if fields are not blank.
#         if startDateField.getText() and endDateField.getText() is not None:
#             pdStart, pdEnd = ProcessPD.getSpecifiedDates(startDateField, endDateField)
#         else:
        pdStart = None
        pdEnd = None

        # Create Paired Data for Selected Locations.
        ProcessPD.processPairedData(selectedLocations, dList, mList, aList,
                                    pdStart, pdEnd)

        # Populate the UI Paired Data Table.
        CalcPD.updatePDTable(dssFile, eventsTable, dm_events)

        # Close the DSS File.
        dssFile.close()

    def plotPDBtnSelect(event):
        selected_Events = eventsTable.getSelectedRows()
        # Print 'selected_Events: ', selected_Events
        # Sorting of the table by selecting the headers is doen by using: eventsTable.setAutoCreateRowSorter(True)
        # This sorts the table but does not update the table model.
        # To ensure sorting and selecting of resulting paths works properly,
        # we must convert our selection using: eventsTable.convertRowIndexToModel(event)
        selectedEvents = []
        for event in selected_Events:
            selectedEvents.append(eventsTable.convertRowIndexToModel(event))
#         print 'selectedEvents: ', selectedEvents
        PlotPD.plotPD(eventsTable, selectedEvents, dssFile)
        dssFile.close()

    def calcMeltRateBtnSelect(event):
        selected_Events = eventsTable.getSelectedRows()
        selectedEvents = []
        for event in selected_Events:
            selectedEvents.append(eventsTable.convertRowIndexToModel(event))
        meltRateList = CalcMeltRate.calcMeltRate(selectedEvents, eventsTable,
                                                 meltRateTable, dssFile)
        CalcMeltRate.updateTable(meltRateTable, meltRateList, dm_meltRate)
        dssFile.close()

    locDict, bList = Locations.getPaths(dssFile)
    locList = Locations.getList(locDict)

    list_locations = JList(locList)
    scrollPane_locations.setViewportView(list_locations)
    list_locations.setBorder(LineBorder(Color(0, 0, 0), 2, True))

    eventsTable = JTable()
    scrollPane_events.setViewportView(eventsTable)
    scrollPane_events.setBorder(LineBorder(Color(1, 1, 1), 2, True))
    eventsTable.setFont(Font("Tahoma", Font.PLAIN, 11))

    locationsList, eventsList = Locations.getPairedData(dssFile)

    columns = ("Location", "Event")
    data = []
    for l, e in zip(locationsList, eventsList):
        data.append([l, e])
    dm_events = DefaultTableModel(data, columns)

    eventsTable.setModel(dm_events)
    eventsTable.setAutoCreateRowSorter(True)

    eventsTable.getColumnModel().getColumn(0).setPreferredWidth(154)
    eventsTable.getColumnModel().getColumn(1).setResizable(False)
    eventsTable.getColumnModel().getColumn(1).setPreferredWidth(154)
    eventsTable.setRowSelectionAllowed(True)

    inputPanel = JPanel()
    inputPanel.setBorder(EmptyBorder(0, 0, 0, 0))
    inputPanel.setBackground(Color(255, 255, 255))
    inputPanel.setBounds(270, 11, 410, 27)
    contentPane.add(inputPanel)
    inputPanel.setLayout(None)
    inputPanel.setVisible(True)

    lbl_locations = JLabel(
        "DSS Locations that have PRECIP-INC, TEMPERATURE-AIR-AVG, and SWE. ")
    lbl_locations.setFont(Font("Tahoma", Font.PLAIN, 12))
    lbl_locations.setBounds(0, 11, 410, 15)
    inputPanel.add(lbl_locations)

    btnRecalc = JButton(btnIcon, actionPerformed=recalcBtnSelect)
    btnRecalc.setText("Calculate Paired Data")
    btnRecalc.setFont(Font("Tahoma", Font.BOLD, 12))
    btnRecalc.setForeground(Color.WHITE)
    btnRecalc.setBackground(Color.WHITE)
    btnRecalc.setBorderPainted(False)
    btnRecalc.setContentAreaFilled(False)
    btnRecalc.setFocusPainted(False)
    btnRecalc.setOpaque(True)
    btnRecalc.setVerticalTextPosition(SwingConstants.CENTER)
    btnRecalc.setHorizontalTextPosition(SwingConstants.CENTER)
    btnRecalc.setBounds(382, 293, 165, 54)
    contentPane.add(btnRecalc)

    leftPanel = JPanel()
    leftPanel.setBackground(Color.DARK_GRAY)
    leftPanel.setBounds(0, 0, 250, 780)
    contentPane.add(leftPanel)
    leftPanel.setLayout(None)

    lbl_castle = JLabel("")
    lbl_castle.setBounds(110, 678, 40, 25)
    leftPanel.add(lbl_castle)

    try:
        i_corps = ImageIO.read(File(img_dir + "/CorpsCastle.png"))
    except:
        i_corps = ImageIO.read(File(img_dir2 + "/CorpsCastle.png"))

    corpsCastle = i_corps.getScaledInstance(lbl_castle.getWidth(),
                                            lbl_castle.getHeight(),
                                            Image.SCALE_SMOOTH)

    lbl_castle.setVerticalAlignment(SwingConstants.TOP)
    lbl_castle.setIcon(ImageIcon(corpsCastle))

    lbl_logo = JLabel("")
    lbl_logo.setBounds(18, 294, 218, 148)
    leftPanel.add(lbl_logo)

    try:
        snowLogo = ImageIO.read(File(img_dir + "/melted-snowman.png"))
    except:
        snowLogo = ImageIO.read(File(img_dir2 + "/melted-snowman.png"))

    dssLogo = snowLogo.getScaledInstance(lbl_logo.getWidth(),
                                         lbl_logo.getHeight(),
                                         Image.SCALE_SMOOTH)

    lbl_logo.setVerticalAlignment(SwingConstants.TOP)
    lbl_logo.setIcon(ImageIcon(dssLogo))

    lbl_logo2 = JLabel("")
    lbl_logo2.setBounds(18, 11, 218, 148)
    leftPanel.add(lbl_logo2)

    try:
        snowPacLogo = ImageIO.read(File(img_dir + "/SnowPac.png"))
    except:
        snowPacLogo = ImageIO.read(File(img_dir2 + "/SnowPac.png"))

    snowPac = snowPacLogo.getScaledInstance(lbl_logo2.getWidth(),
                                            lbl_logo2.getHeight(),
                                            Image.SCALE_SMOOTH)

    lbl_logo2.setVerticalAlignment(SwingConstants.TOP)
    lbl_logo2.setIcon(ImageIcon(snowPac))

    #     lbl_close = JLabel("X")
    #
    #     class CloseClickListener(MouseAdapter):
    # #       @Override
    #         def mouseEntered(self):
    #             lbl_close.setBorder(LineBorder.createGrayLineBorder())
    # #       @Override
    #         def mouseExited(self):
    #             lbl_close.setBorder(None)
    # #       @Override
    #         def mouseClicked(self):
    #             lbl_close.setBorder(BorderFactory.createLineBorder(Color.red));
    #             sys.exit();

    #     cL = CloseClickListener()
    #     lbl_close.addMouseListener(cL)
    #
    #     lbl_close.setHorizontalAlignment(SwingConstants.CENTER);
    #     lbl_close.setForeground(Color(241, 57, 83));
    #     lbl_close.setFont(Font("Tahoma", Font.PLAIN, 18));
    #     lbl_close.setBounds(1071, 0, 37, 27);
    #     contentPane.add(lbl_close);

    lblPxf = JLabel("Base Temperature (F):")
    lblPxf.setToolTipText("The temperature at which melt will occur.")
    lblPxf.setFont(Font("Tahoma", Font.PLAIN, 12))
    lblPxf.setBounds(400, 263, 132, 15)
    contentPane.add(lblPxf)

    textField_8 = JTextField()
    textField_8.setFont(Font("Tahoma", Font.PLAIN, 12))
    textField_8.setToolTipText("The temperature at which melt will occur.")
    textField_8.setText("32.0")
    textField_8.setBounds(548, 263, 40, 20)
    contentPane.add(textField_8)
    textField_8.setColumns(10)

    chckbxShowLocationPlot = JCheckBox("Plot Locations")
    chckbxShowLocationPlot.setToolTipText(
        "Will plot the Temp, Precip, SWE, ATI, and Melt for each selected location."
    )
    chckbxShowLocationPlot.setSelected(True)
    chckbxShowLocationPlot.setBackground(Color.WHITE)
    chckbxShowLocationPlot.setFont(Font("Tahoma", Font.PLAIN, 12))
    chckbxShowLocationPlot.setBounds(547, 310, 120, 23)
    contentPane.add(chckbxShowLocationPlot)

    lblEvents = JLabel("Paired Data")
    lblEvents.setBounds(270, 346, 72, 15)
    contentPane.add(lblEvents)
    lblEvents.setFont(Font("Tahoma", Font.PLAIN, 12))

    #     lblAtiThreshold = JLabel("ATI Threshold:");
    #     lblAtiThreshold.setToolTipText("Some Melt Events are small & can be ignored. The ATI Threshold is a value that must be reached for the event to be listed.");
    #     lblAtiThreshold.setFont(Font("Tahoma", Font.PLAIN, 12));
    #     lblAtiThreshold.setBounds(500, 610, 82, 15);
    #     contentPane.add(lblAtiThreshold);

    #     textField_9 = JTextField();
    #     textField_9.setFont(Font("Tahoma", Font.PLAIN, 12));
    #     textField_9.setText("0.0");
    #     textField_9.setToolTipText("Some Melt Events are small & can be ignored. The ATI Threshold is a value that must be reached for the event to be listed.");
    #     textField_9.setColumns(10);
    #     textField_9.setBounds(600, 608, 60, 20);
    #     contentPane.add(textField_9);

    btnPlot = JButton(btnIcon, actionPerformed=plotPDBtnSelect)
    btnPlot.setText("Plot Paired Data")
    btnPlot.setFont(Font("Tahoma", Font.BOLD, 12))
    btnPlot.setForeground(Color.WHITE)
    btnPlot.setBackground(Color.WHITE)
    btnPlot.setBorderPainted(False)
    btnPlot.setContentAreaFilled(False)
    btnPlot.setFocusPainted(False)
    btnPlot.setOpaque(False)
    btnPlot.setVerticalTextPosition(SwingConstants.CENTER)
    btnPlot.setHorizontalTextPosition(SwingConstants.CENTER)
    btnPlot.setBounds(385, 657, 163, 54)
    contentPane.add(btnPlot)

    lblAtimeltrateTable = JLabel("ATI-Meltrate Table")
    lblAtimeltrateTable.setFont(Font("Tahoma", Font.PLAIN, 12))
    lblAtimeltrateTable.setBounds(708, 10, 410, 15)
    contentPane.add(lblAtimeltrateTable)

    lblAtimeltrateTable2 = JLabel(
        "The first ATI value should be 0. ATI values must be ascending.")
    lblAtimeltrateTable2.setFont(Font("Tahoma", Font.PLAIN, 11))
    lblAtimeltrateTable2.setBounds(708, 30, 410, 15)
    contentPane.add(lblAtimeltrateTable2)

    btnCalculateMeltrate = JButton(btnIcon,
                                   actionPerformed=calcMeltRateBtnSelect)
    btnCalculateMeltrate.setText("Calculate Meltrate")
    btnCalculateMeltrate.setFont(Font("Tahoma", Font.BOLD, 12))
    btnCalculateMeltrate.setToolTipText(
        "Calculate Meltrate for ATI values in the ATI-Meltrate Table. Calculation will performed on the Paired Data Records Selected in the Paired Data Table."
    )
    btnCalculateMeltrate.setForeground(Color.WHITE)
    btnCalculateMeltrate.setBackground(Color.WHITE)
    btnCalculateMeltrate.setBorderPainted(False)
    btnCalculateMeltrate.setContentAreaFilled(False)
    btnCalculateMeltrate.setFocusPainted(False)
    btnCalculateMeltrate.setOpaque(False)
    btnCalculateMeltrate.setVerticalTextPosition(SwingConstants.CENTER)
    btnCalculateMeltrate.setHorizontalTextPosition(SwingConstants.CENTER)
    btnCalculateMeltrate.setBounds(792, 657, 163, 54)
    contentPane.add(btnCalculateMeltrate)

    frame.setVisible(True)
    dssFile.close()
예제 #25
0
    def __init__(self):

        frame = JFrame("S1riu5 Spy")
        frame.setSize(700, 690)
        frame.setLocationRelativeTo(None)
        frame.setLayout(BorderLayout())

        tabPane = JTabbedPane(JTabbedPane.TOP)

        #第一个Tab用来做C段查询

        eachIp = self.getIp(HOSTDOMAIN)

        iList = eachIp.split(".")

        theIP = iList[0] + "." + iList[1] + "." + iList[2] + ".1/24"

        panel1 = JPanel()
        label = JLabel("IP CIDR:")
        self.textfield1 = JTextField(theIP, 15)
        button = JButton("SCAN", actionPerformed=self.cNmapScan)
        self.textArea = JTextArea(40, 65)
        self.textArea.append("IP: " + eachIp)
        self.textArea.setLineWrap(True)  #激活自动换行功能
        self.textArea.setWrapStyleWord(True)
        # 激活断行不断字功能

        panel1.add(label)
        panel1.add(self.textfield1)
        panel1.add(button)
        panel1.add(JScrollPane(self.textArea))  #设置自动滚动条
        tabPane.addTab("C segment query ", panel1)

        #第二个Tab用来做子域名查询

        theName = self.getDomain1(HOSTDOMAIN)

        self.textArea2 = JTextArea(40, 65)
        #self.textArea.append("IP: " + eachIp)
        self.textArea2.setLineWrap(True)  #激活自动换行功能
        self.textArea2.setWrapStyleWord(True)  # 激活断行不断字功能

        label2 = JLabel("Domain: ")
        self.textfield2 = JTextField(theName, 15)
        button2 = JButton("SCAN", actionPerformed=self.subDomain)
        self.panel2 = JPanel()
        self.panel2.add(label2)
        self.panel2.add(self.textfield2)
        self.panel2.add(button2)
        #self.panel2.add(scrollPane)
        self.panel2.add(JScrollPane(self.textArea2))
        tabPane.addTab("subDomains", self.panel2)

        #第三个Tab用来做敏感文件扫描

        self.tableData0 = [["1", "2"]]
        colNames2 = ('url', 'http code')
        dataModel3 = DefaultTableModel(self.tableData0, colNames2)
        self.table3 = JTable(dataModel3)
        ##

        label3 = JLabel("URL: ")
        self.textfield3 = JTextField(HOSTDOMAIN, 15)
        self.textArea3 = JTextArea(40, 65)
        #self.textArea.append("IP: " + eachIp)
        self.textArea3.setLineWrap(True)  #激活自动换行功能
        self.textArea3.setWrapStyleWord(True)  # 激活断行不断字功能
        a = 0
        b = 0
        self.label4 = JLabel(str(a) + "/" + str(b))
        #
        self.chkbox1 = JCheckBox('ASP')
        self.chkbox2 = JCheckBox('ASPX')
        self.chkbox3 = JCheckBox('JSP')
        self.chkbox4 = JCheckBox('PHP')
        self.chkbox5 = JCheckBox('MDB')
        self.chkbox6 = JCheckBox('DIR')
        button3 = JButton("SCAN", actionPerformed=self.senFileScan)
        panel3 = JPanel()

        panel3.add(label3)
        panel3.add(self.textfield3)
        panel3.add(self.chkbox1)
        panel3.add(self.chkbox2)
        panel3.add(self.chkbox3)
        panel3.add(self.chkbox4)
        panel3.add(self.chkbox5)
        panel3.add(self.chkbox6)
        panel3.add(button3)
        panel3.add(self.label4)
        panel3.add(JScrollPane(self.textArea3))

        #
        tabPane.addTab("Sebsitive File", panel3)
        #
        frame.add(tabPane)
        frame.setVisible(True)
    def registerExtenderCallbacks(self, callbacks):
        # save the helpers for later
        self.helpers = callbacks.getHelpers()

        # set our extension name
        callbacks.setExtensionName("Custom Request Handler")
        callbacks.registerSessionHandlingAction(self)
        callbacks.registerContextMenuFactory(self)
        self._text_editor = callbacks.createTextEditor()
        self._text_editor.setEditable(False)

        #How much loaded the table row
        self.current_column_id = 0

        #GUI
        self._split_main = JSplitPane(JSplitPane.VERTICAL_SPLIT)
        self._split_top = JSplitPane(JSplitPane.HORIZONTAL_SPLIT)
        self._split_top.setPreferredSize(Dimension(100, 50))
        self._split_top.setDividerLocation(700)
        self._split_center = JSplitPane(JSplitPane.VERTICAL_SPLIT)

        boxVertical = swing.Box.createVerticalBox()
        box_top = swing.Box.createHorizontalBox()
        boxHorizontal = swing.Box.createHorizontalBox()
        buttonHorizontal = swing.Box.createHorizontalBox()
        boxVertical.add(boxHorizontal)

        box_regex = swing.Box.createVerticalBox()
        border = BorderFactory.createTitledBorder(LineBorder(Color.BLACK),
                                                  "Extract target strings",
                                                  TitledBorder.LEFT,
                                                  TitledBorder.TOP)
        box_regex.setBorder(border)

        self._add_btn = JButton("Add")
        self._add_btn.addActionListener(self)
        self._remove_btn = JButton("Remove")
        self._remove_btn.addActionListener(self)

        items = [
            'JSON',
            'Header',
        ]
        self._dropdown = JComboBox(items)
        type_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        type_panel.add(JLabel('Type:'))
        type_panel.add(self._dropdown)

        self._jLabel_param = JLabel("Name:")
        self._param_error = JLabel("Name is required")

        self._param_error.setVisible(False)
        self._param_error.setFont(Font(Font.MONOSPACED, Font.ITALIC, 12))
        self._param_error.setForeground(Color.red)

        regex_checkbox = JPanel(FlowLayout(FlowLayout.LEADING))
        self._is_use_regex = JCheckBox("Extract from regex group")
        regex_checkbox.add(self._is_use_regex)
        self._jTextIn_param = JTextField(20)
        self._jLabel_regex = JLabel("Regex:")
        self._jTextIn_regex = JTextField(20)
        self._regex_error = JLabel("No group defined")
        self._regex_error.setVisible(False)
        self._regex_error.setFont(Font(Font.MONOSPACED, Font.ITALIC, 12))
        self._regex_error.setForeground(Color.red)

        self._param_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        self._param_panel.add(self._jLabel_param)
        self._param_panel.add(self._jTextIn_param)
        self._param_panel.add(self._param_error)

        self._regex_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        self._regex_panel.add(self._jLabel_regex)
        self._regex_panel.add(self._jTextIn_regex)
        self._regex_panel.add(self._regex_error)
        button_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        #padding
        button_panel.add(JPanel())
        button_panel.add(JPanel())
        button_panel.add(JPanel())
        button_panel.add(self._add_btn)
        button_panel.add(self._remove_btn)
        box_regex.add(type_panel)
        box_regex.add(self._param_panel)
        box_regex.add(regex_checkbox)
        box_regex.add(self._regex_panel)
        buttonHorizontal.add(button_panel)
        box_regex.add(buttonHorizontal)
        boxVertical.add(box_regex)
        box_top.add(boxVertical)

        box_file = swing.Box.createHorizontalBox()
        checkbox_panel = JPanel(FlowLayout(FlowLayout.LEADING))
        border = BorderFactory.createTitledBorder(
            LineBorder(Color.BLACK), 'Payload Sets [Simple list]',
            TitledBorder.LEFT, TitledBorder.TOP)
        box_file.setBorder(border)

        box_param = swing.Box.createVerticalBox()
        box_param.add(checkbox_panel)

        file_column_names = [
            "Type",
            "Name",
            "Payload",
        ]
        data = []
        self.file_table_model = DefaultTableModel(data, file_column_names)
        self.file_table = JTable(self.file_table_model)
        self.file_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)

        column_model = self.file_table.getColumnModel()
        for count in xrange(column_model.getColumnCount()):
            column = column_model.getColumn(count)
            column.setPreferredWidth(160)

        self.file_table.preferredScrollableViewportSize = Dimension(500, 70)
        self.file_table.setFillsViewportHeight(True)

        panel_dropdown = JPanel(FlowLayout(FlowLayout.LEADING))
        self._file_dropdown = JComboBox(items)
        panel_dropdown.add(JLabel('Type:'))
        panel_dropdown.add(self._file_dropdown)
        box_param.add(panel_dropdown)
        box_param.add(JScrollPane(self.file_table))
        callbacks.customizeUiComponent(self.file_table)

        file_param_panel = JPanel(FlowLayout(FlowLayout.LEADING))

        self._file_param = JLabel("Name:")
        self._file_param_text = JTextField(20)

        file_param_panel.add(self._file_param)
        file_param_panel.add(self._file_param_text)
        self._error_message = JLabel("Name is required")
        self._error_message.setVisible(False)
        self._error_message.setFont(Font(Font.MONOSPACED, Font.ITALIC, 12))
        self._error_message.setForeground(Color.red)
        file_param_panel.add(self._error_message)
        box_param.add(file_param_panel)

        box_button_file = swing.Box.createVerticalBox()
        self._file_load_btn = JButton("Load")

        self._file_clear_btn = JButton("Clear")
        self._file_clear_btn.addActionListener(self)
        self._file_load_btn.addActionListener(self)
        box_button_file.add(self._file_load_btn)
        box_button_file.add(self._file_clear_btn)
        box_file.add(box_button_file)
        box_file.add(box_param)
        boxVertical.add(box_file)

        regex_column_names = [
            "Type",
            "Name",
            "Regex",
            "Start at offset",
            "End at offset",
        ]
        #clear target.json
        with open("target.json", "w") as f:
            pass
        data = []
        self.target_table_model = DefaultTableModel(data, regex_column_names)
        self.target_table = JTable(self.target_table_model)
        self.target_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
        column_model = self.target_table.getColumnModel()
        for count in xrange(column_model.getColumnCount()):
            column = column_model.getColumn(count)
            column.setPreferredWidth(100)

        self.target_table.preferredScrollableViewportSize = Dimension(500, 70)
        self.target_table.setFillsViewportHeight(True)
        callbacks.customizeUiComponent(self.target_table)
        callbacks.customizeUiComponent(boxVertical)
        table_panel = swing.Box.createVerticalBox()
        table_panel.add(JScrollPane(self.target_table))
        box_top.add(table_panel)

        self._jScrollPaneOut = JScrollPane()
        #self._split_main.setBottomComponent(self._jScrollPaneOut)
        self._split_main.setBottomComponent(self._text_editor.getComponent())
        self._split_main.setTopComponent(box_top)
        self._split_main.setDividerLocation(450)
        callbacks.customizeUiComponent(self._split_main)
        callbacks.addSuiteTab(self)
        return
예제 #27
0
    def create(self):

        # Estilo general para todas las sub-tab.
        gBC = GridBagConstraints()
        gBC.fill = GridBagConstraints.BOTH
        gBC.ipadx = 5
        gBC.ipady = 5
        gBC.insets = Insets(0, 5, 5, 5)
        gBC.weightx = 0.5
        #gBC.weighty = 0.7

        #######################################
        ###   Creamos la primera sub-tab. (MASHUP)
        #######################################
        tab_1 = JPanel(GridBagLayout())
        tab_1_jlabelAyuda = JLabel(
            '<html><i>&#8226Tip: This Mashup receive one or more keywords in order to generate a list of possible passwords</i></html>'
        )
        tab_1_jlabelAyuda.setFont(Font("Serif", 0, 12))

        gBC.gridx = 0
        gBC.gridy = 0
        tab_1.add(
            JLabel('<html><font color=green><i>Income:</i></font></html>'),
            gBC)

        gBC.gridy = 1
        tab_1.add(JLabel('<html><b>&#8226 Name:</b></html>'), gBC)
        gBC.gridy = 2
        tab_1.add(self._tab1_nombre, gBC)

        gBC.gridy = 3
        tab_1.add(JLabel('<html><b>&#8226 Surname:</b></html>'), gBC)
        gBC.gridy = 4
        tab_1.add(self._tab1_apellido, gBC)

        gBC.gridy = 5
        tab_1.add(JLabel('<html><b>&#8226 Birthdate: (DDMMYYYY)</b></html>'),
                  gBC)
        gBC.gridy = 6
        tab_1.add(self._tab1_FNacimiento, gBC)

        gBC.gridy = 7
        tab_1.add(JLabel('<html><b>&#8226 Pet:</b></html>'), gBC)
        gBC.gridy = 8
        tab_1.add(self._tab1_mascota, gBC)

        gBC.gridy = 9
        tab_1.add(JLabel('<html><b>&#8226 Anyother:</b></html>'), gBC)
        gBC.gridy = 10
        tab_1.add(self._tab1_otro, gBC)

        gBC.gridy = 11
        tab_1.add(JLabel('<html><b>&#8226 Passwd Min Size:</b></html>'), gBC)
        gBC.gridy = 12
        tab_1.add(self._tab1_minsize, gBC)

        gBC.gridy = 13
        tab_1.add(JLabel('<html><b>&#8226 Passwd Max Size:</b></html>'), gBC)
        gBC.gridy = 14
        tab_1.add(self._tab1_maxsize, gBC)

        gBC.gridy = 15
        tab_1.add(
            JLabel(
                '<html><b>&#8226 Especial Chars: (comma separated)</b></html>'
            ), gBC)
        gBC.gridy = 16
        tab_1.add(self._tab1_specialchars, gBC)

        gBC.gridy = 17
        tab_1.add(self._tab1_transformations, gBC)

        gBC.gridy = 18
        tab_1.add(self._tab1_firstcapital, gBC)

        gBC.gridy = 19
        tab_1.add(JButton('Mashup!', actionPerformed=self.mashup), gBC)

        gBC.gridy = 20
        gBC.gridwidth = 3
        tab_1.add(JSeparator(), gBC)
        gBC.gridwidth = 1

        gBC.gridy = 21
        gBC.gridwidth = 3
        tab_1.add(tab_1_jlabelAyuda, gBC)
        gBC.gridwidth = 1

        gBC.gridx = 1
        gBC.gridy = 0
        gBC.gridheight = 20
        gBC.weightx = 0
        tab_1.add(JSeparator(SwingConstants.VERTICAL), gBC)
        gBC.gridheight = 1
        gBC.weightx = 0.5

        gBC.gridx = 2
        gBC.gridy = 0
        tab_1.add(
            JLabel('<html><font color=green><i>Outcome:</i></font></html>'),
            gBC)

        gBC.gridy = 1
        gBC.gridwidth = 2
        gBC.gridheight = 18
        tab_1.add(self._tab1_feedback_sp, gBC)
        gBC.gridwidth = 1
        gBC.gridheight = 1

        gBC.gridy = 19
        tab_1.add(
            JButton('Copy to clipboard!', actionPerformed=self.cpy_clipboard),
            gBC)

        #######################################
        ###   Creamos la segunda sub-tab. (REDIRECT)
        #######################################
        tab_2 = JPanel(GridBagLayout())
        tab_2_jlabelAyuda = JLabel(
            '<html><i>&#8226Tip: This Redirect receive a pair of hosts x,y in order to redirect from x to y.</i></html>'
        )
        tab_2_jlabelAyuda.setFont(Font("Serif", 0, 12))

        gBC.gridx = 0
        gBC.gridy = 0
        tab_2.add(
            JLabel('<html><b>&#8226 From: (i.e. www.facebook.com)</b></html>'),
            gBC)
        gBC.gridx = 1
        gBC.gridy = 0
        tab_2.add(self._tab2_JTFa, gBC)

        gBC.gridx = 2
        gBC.gridy = 0
        tab_2.add(
            JLabel('<html><b>&#8226 To: (i.e. www.myhomepage.es)</b></html>'),
            gBC)
        gBC.gridx = 3
        gBC.gridy = 0
        tab_2.add(self._tab2_JTFaa, gBC)

        gBC.gridx = 0
        gBC.gridy = 1
        gBC.gridwidth = 4
        tab_2.add(JSeparator(), gBC)
        gBC.gridwidth = 1

        gBC.gridx = 0
        gBC.gridy = 2
        tab_2.add(JLabel('<html><b>&#8226 From:</b></html>'), gBC)
        gBC.gridx = 1
        gBC.gridy = 2
        tab_2.add(self._tab2_JTFb, gBC)

        gBC.gridx = 2
        gBC.gridy = 2
        tab_2.add(JLabel('<html><b>&#8226 To:</b></html>'), gBC)
        gBC.gridx = 3
        gBC.gridy = 2
        tab_2.add(self._tab2_JTFbb, gBC)

        gBC.gridx = 0
        gBC.gridy = 3
        gBC.gridwidth = 4
        tab_2.add(self._tab2_boton, gBC)
        gBC.gridwidth = 1

        gBC.gridx = 0
        gBC.gridy = 4
        gBC.gridwidth = 4
        gBC.insets = Insets(100, 10, 5, 10)
        tab_2.add(JSeparator(), gBC)
        gBC.gridwidth = 1
        gBC.insets = Insets(5, 10, 5, 10)

        gBC.gridx = 0
        gBC.gridy = 5
        gBC.gridwidth = 4
        tab_2.add(tab_2_jlabelAyuda, gBC)
        gBC.gridwidth = 1

        #######################################
        ###   Creamos la tercera sub-tab. (LOADER)
        #######################################
        tab_3 = JPanel(GridBagLayout())
        tab_3_jlabelAyuda = JLabel(
            '<html><i>&#8226Tip: This Loader receive a list of Hosts or IPs that will be added to the Burp Scope.</i></html>'
        )
        tab_3_jlabelAyuda.setFont(Font("Serif", 0, 12))

        gBC.gridx = 0
        gBC.gridy = 0
        tab_3.add(
            JLabel(
                '<html><font color=green><i>List of targets: (i.e. http://www.mytargetweb.com)</i></font></html>'
            ), gBC)
        gBC.gridy = 1
        gBC.gridheight = 10
        gBC.weighty = 0.5
        tab_3.add(self._tab3_urls_sp, gBC)
        gBC.gridheight = 1
        gBC.weighty = 0
        gBC.gridy = 11
        tab_3.add(
            JButton('Load Into Target => Scope!', actionPerformed=self.loader),
            gBC)

        gBC.gridy = 12
        gBC.gridwidth = 5
        gBC.insets = Insets(100, 10, 5, 10)
        tab_3.add(JSeparator(), gBC)
        gBC.gridwidth = 1
        gBC.insets = Insets(5, 10, 5, 10)

        gBC.gridy = 13
        tab_3.add(tab_3_jlabelAyuda, gBC)

        #######################################
        ###   Creamos la cuarta sub-tab. (HEADERS)
        #######################################
        tab_4_jlabelAyuda = JLabel(
            "<html><i>&#8226Tip: This Headers records all unique headers that appear in every host, check out the security headers.</i></html>"
        )
        tab_4_jlabelAyuda.setFont(Font("Serif", 0, 12))

        tab_4_jLabelRecomendacion = JLabel(
            "<html>&#8226<b>Server</b>: Don't give away much information.<br> &#8226<b>Content-Security-Policy</b>: Protect your site from XSS attacks by whitelisting sources of approved content.<br> &#8226<b>Strict-Transport-Security</b>: Enforce the browser to use HTTPS.<br> &#8226<b>Public-Key-Pins</b>: Protect your site from MITM attacks.<br> &#8226<b>X-Content-Type-Options</b>: the valid value is -> nosniff .<br> &#8226<b>X-Frame-Options</b>: tells the browser whether you want to allow your site to be framed or not.<br> &#8226<b>X-XSS-Protection</b>: the best value is -> 1; mode=block .</html>"
        )
        tab_4_jLabelRecomendacion.setFont(Font("Dialog", 0, 13))

        tab_4 = JPanel(GridBagLayout())
        splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT)
        tab_4_top = JPanel(GridBagLayout())
        tab_4_bottom = JPanel(GridBagLayout())

        gBC_table = GridBagConstraints()
        gBC_table.fill = GridBagConstraints.BOTH
        gBC_table.ipadx = 5
        gBC_table.ipady = 5
        gBC_table.insets = Insets(5, 10, 5, 10)
        gBC_table.weightx = 1
        gBC_table.weighty = 1

        tabla_datos = []
        tabla_headers = ('Severity', 'Header', 'Value', 'Host')
        self._tab4_tabla_model = DefaultTableModel(tabla_datos, tabla_headers)
        tabla_ej = JTable(self._tab4_tabla_model)
        tabla_example = JScrollPane(tabla_ej,
                                    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED)

        gBC_table.gridx = 0
        gBC_table.gridy = 0
        gBC_table.gridheight = 5
        tab_4_top.add(tabla_example, gBC_table)
        gBC_table.gridheight = 1

        gBC_table.weightx = 0.5
        gBC_table.weighty = 0
        gBC_table.gridwidth = 2
        gBC_table.gridx = 0
        gBC_table.gridy = 0
        tab_4_bottom.add(JSeparator(), gBC_table)
        gBC_table.gridy = 1
        tab_4_bottom.add(tab_4_jlabelAyuda, gBC_table)
        gBC_table.gridy = 2
        tab_4_bottom.add(tab_4_jLabelRecomendacion, gBC_table)

        splitpane.setTopComponent(tab_4_top)
        splitpane.setBottomComponent(tab_4_bottom)
        gBC_table.weightx = 1
        gBC_table.weighty = 1
        gBC_table.gridx = 0
        gBC_table.gridy = 0
        tab_4.add(splitpane, gBC_table)

        #######################################
        ###   Creamos la quinta sub-tab. (ACTIVE SCAN)
        #######################################
        tab_5 = JPanel(GridBagLayout())
        tab_5_jlabelAyuda = JLabel(
            '<html><i>&#8226Tip: This Quick Scan receive a list of targets and launch an active scan.</i></html>'
        )
        tab_5_jlabelAyuda.setFont(Font("Serif", 0, 12))
        tab_5_jlabelWarning = JLabel(
            '<html><font color=red><i>&#8226Warning: Active scanning generates large numbers of requests which are malicious in form and which may result in compromise of the application. You should use this scanning mode with caution, only with the explicit permission of the application owner. For more information, read the documentation of active scan, Burp Suite.</font></i></html>'
        )
        tab_5_jlabelWarning.setFont(Font("Dialog", 0, 13))

        gBC.gridx = 0
        gBC.gridy = 0
        tab_5.add(
            JLabel(
                '<html><font color=green><i>List of targets: (i.e. http://192.168.1.1/index.html)</i></font></html>'
            ), gBC)
        gBC.gridy = 1
        gBC.gridheight = 8
        gBC.weighty = 0.5
        tab_5.add(self._tab5_target_sp, gBC)
        gBC.gridheight = 1
        gBC.weighty = 0
        gBC.gridy = 9
        tab_5.add(JButton('Launch Scan!', actionPerformed=self.do_active_scan),
                  gBC)

        gBC.gridy = 10
        gBC.gridwidth = 5
        gBC.insets = Insets(100, 10, 5, 10)
        tab_5.add(JSeparator(), gBC)
        gBC.gridwidth = 1
        gBC.insets = Insets(5, 10, 5, 10)

        gBC.gridy = 11
        tab_5.add(tab_5_jlabelAyuda, gBC)
        gBC.gridy = 12
        tab_5.add(tab_5_jlabelWarning, gBC)

        #######################################
        ###   Creamos la ultima sub-tab.
        #######################################
        tab_about = JPanel(GridBagLayout())

        gBC_about = GridBagConstraints()
        gBC_about.fill = GridBagConstraints.HORIZONTAL
        gBC_about.ipadx = 5
        gBC_about.ipady = 5
        gBC_about.insets = Insets(5, 10, 5, 10)
        gBC_about.weightx = 1
        gBC_about.weighty = 1

        Jlabel1 = JLabel('<html><b>Plug-in L-Tools</b></html>')
        Jlabel1.setFont(Font("Dialog", 1, 18))
        jlabel2 = JLabel(
            '<html>This Plug-in provides utilities for pentesters, researchers and developers, in order to support their work.</html>'
        )
        jlabel3 = JLabel('<html><b>CC-BY 4.0, 2017. Gino Angles</b></html>')
        jlabel3.setFont(Font("Dialog", 1, 14))
        jlabel4 = JLabel('<html><b>License</b></html>')
        jlabel4.setFont(Font("Dialog", 1, 14))
        jlabel5 = JLabel(
            '<html><img alt="Licensed under a Creative Commons BY" style="border-width:0" src="https://licensebuttons.net/l/by/4.0/88x31.png"></html>'
        )
        jlabel6 = JLabel(
            '<html>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.</html>'
        )
        jlabel7 = JLabel('<html><b>Dependencies</b></html>')
        jlabel7.setFont(Font("Dialog", 1, 14))
        jlabel8 = JLabel('Jython +2.7')
        jlabel9 = JLabel('http://www.jython.org')

        gBC_about.gridx = 0
        gBC_about.gridy = 0
        tab_about.add(Jlabel1, gBC_about)
        gBC_about.gridy = 1
        tab_about.add(jlabel2, gBC_about)
        gBC_about.gridy = 2
        tab_about.add(jlabel3, gBC_about)

        gBC_about.gridy = 3
        gBC_about.gridwidth = 5
        tab_about.add(JSeparator(), gBC_about)
        gBC_about.gridwidth = 1

        gBC_about.gridy = 4
        tab_about.add(jlabel4, gBC_about)
        gBC_about.gridy = 5
        tab_about.add(jlabel5, gBC_about)
        gBC_about.gridy = 6
        tab_about.add(jlabel6, gBC_about)

        gBC_about.gridy = 7
        gBC_about.gridwidth = 5
        tab_about.add(JSeparator(), gBC_about)
        gBC_about.gridwidth = 1

        gBC_about.gridy = 8
        tab_about.add(jlabel7, gBC_about)
        gBC_about.gridy = 9
        tab_about.add(jlabel8, gBC_about)
        gBC_about.gridy = 10
        tab_about.add(jlabel9, gBC_about)

        # Añadimos los sub-tab al contenedor y lo devolvemos.
        self.contenedor.addTab('Mashup', tab_1)
        self.contenedor.addTab('Redirect', tab_2)
        self.contenedor.addTab('Loader', tab_3)
        self.contenedor.addTab('Headers', tab_4)
        self.contenedor.addTab('Quick Scan', tab_5)
        self.contenedor.addTab('About', tab_about)

        return self.contenedor
예제 #28
0
    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()
        self._callbacks.setExtensionName(self.name)
        self._callbacks.registerScannerCheck(self)

        self._dictPayloads = {}
        self._dictHeaders = {}
        self._dictParams = {}
        self.status_flag = False

        self.jfc = JFileChooser("./")
        self.jfc.setDialogTitle("Upload Payloads")
        self.jfc.setFileFilter(FileNameExtensionFilter("TXT file", ["txt"]))

        self._layout = GridBagLayout()
        self._jPanel.setLayout(self._layout)

        self._jLabelTechniques = JLabel("Press to start:")
        self.createAnyView(self._jLabelTechniques, 0, 0, 3, 1,
                           Insets(0, 0, 10, 0))

        self.submitSearchButton = swing.JButton(
            'Run proxy', actionPerformed=self.active_flag)
        self.submitSearchButton.setBackground(Color.WHITE)
        self.createAnyView(self.submitSearchButton, 3, 0, 6, 1,
                           Insets(0, 0, 10, 0))

        self._jPanel.setBounds(0, 0, 1000, 1000)
        self._jLabelTechniques = JLabel("Your URL (my.burpcollaborator.net):")
        self.createAnyView(self._jLabelTechniques, 0, 1, 3, 1,
                           Insets(0, 0, 10, 0))

        self._jTextFieldURL = JTextField("", 30)
        self._jTextFieldURL.addActionListener(self.setCallbackUrl)
        self.createAnyView(self._jTextFieldURL, 3, 1, 5, 1,
                           Insets(0, 0, 10, 0))

        self._forkRequestButton = swing.JButton(
            'Parallel Request', actionPerformed=self.forkRequest)
        self._forkRequestButton.setBackground(Color.WHITE)
        self.createAnyView(self._forkRequestButton, 8, 1, 1, 1,
                           Insets(0, 0, 10, 0))

        self._tableModelPayloads = DefaultTableModel()
        self._tableModelPayloads.addColumn("Payload")
        self._tableModelPayloads.addColumn("Active")

        self._tableModelHeaders = DefaultTableModel()
        self._tableModelHeaders.addColumn("Header")
        self._tableModelHeaders.addColumn("Active")

        self._tableModelParams = DefaultTableModel()
        self._tableModelParams.addColumn("Parameter")
        self._tableModelParams.addColumn("Active")

        self._payloadTable = self.createAnyTable(self._tableModelPayloads, 1,
                                                 Dimension(300, 200))
        self.createAnyView(self._payloadTable, 0, 2, 3, 1, Insets(0, 0, 0, 10))

        self._headerTable = self.createAnyTable(self._tableModelHeaders, 2,
                                                Dimension(300, 200))
        self.createAnyView(self._headerTable, 3, 2, 3, 1, Insets(0, 0, 0, 10))

        self._paramTable = self.createAnyTable(self._tableModelParams, 3,
                                               Dimension(300, 200))
        self.createAnyView(self._paramTable, 6, 2, 3, 1, Insets(0, 0, 0, 0))

        deletePayloadButton = swing.JButton(
            'Delete', actionPerformed=self.deleteToPayload)
        deletePayloadButton.setBackground(Color.WHITE)
        self.createAnyView(deletePayloadButton, 0, 3, 1, 1, Insets(3, 0, 0, 0))

        deletePayloadButton = swing.JButton(
            'Upload', actionPerformed=self.uploadToPayload)
        deletePayloadButton.setBackground(Color.WHITE)
        self.createAnyView(deletePayloadButton, 1, 3, 1, 1, Insets(3, 0, 0, 0))

        addPayloadButton = swing.JButton('Add',
                                         actionPerformed=self.addToPayload)
        addPayloadButton.setBackground(Color.WHITE)
        self.createAnyView(addPayloadButton, 2, 3, 1, 1, Insets(3, 0, 0, 10))

        deleteHeaderButton = swing.JButton('Delete',
                                           actionPerformed=self.deleteToHeader)
        deleteHeaderButton.setBackground(Color.WHITE)
        self.createAnyView(deleteHeaderButton, 3, 3, 1, 1, Insets(3, 0, 0, 0))

        self._overwriteHeaderButton = swing.JButton(
            'Overwrite', actionPerformed=self.overwriteHeader)
        self._overwriteHeaderButton.setBackground(Color.WHITE)
        self.createAnyView(self._overwriteHeaderButton, 4, 3, 1, 1,
                           Insets(3, 0, 0, 0))

        addHeaderButton = swing.JButton('Add',
                                        actionPerformed=self.addToHeader)
        addHeaderButton.setBackground(Color.WHITE)
        self.createAnyView(addHeaderButton, 5, 3, 1, 1, Insets(3, 0, 0, 10))

        deleteParamsButton = swing.JButton('Delete',
                                           actionPerformed=self.deleteToParams)
        deleteParamsButton.setBackground(Color.WHITE)
        self.createAnyView(deleteParamsButton, 6, 3, 1, 1, Insets(3, 0, 0, 0))

        self._overwriteParamButton = swing.JButton(
            'Overwrite', actionPerformed=self.overwriteParam)
        self._overwriteParamButton.setBackground(Color.WHITE)
        self.createAnyView(self._overwriteParamButton, 7, 3, 1, 1,
                           Insets(3, 0, 0, 0))

        addParamsButton = swing.JButton('Add',
                                        actionPerformed=self.addToParams)
        addParamsButton.setBackground(Color.WHITE)
        self.createAnyView(addParamsButton, 8, 3, 1, 1, Insets(3, 0, 0, 0))

        self._resultsTextArea = swing.JTextArea()
        resultsOutput = swing.JScrollPane(self._resultsTextArea)
        resultsOutput.setMinimumSize(Dimension(800, 200))
        self.createAnyView(resultsOutput, 0, 4, 9, 1, Insets(10, 0, 0, 0))

        self.clearSearchButton = swing.JButton(
            'Clear Search Output', actionPerformed=self.clearOutput)
        self.createAnyView(self.clearSearchButton, 3, 6, 3, 1,
                           Insets(3, 0, 0, 0))

        self._callbacks.customizeUiComponent(self._jPanel)
        self._callbacks.addSuiteTab(self)
        self.starterPack()

        self._callbacks.registerHttpListener(self)
        self._callbacks.registerContextMenuFactory(self)

        return
예제 #29
0
    def registerExtenderCallbacks(self, callbacks):
        # keep a reference to our callbacks object
        self._callbacks = callbacks
        # obtain an extension helpers object
        self._helpers = callbacks.getHelpers()
        # set our extension name
        self._callbacks.setExtensionName(self.name)
        # lists of hosts with querys

        self._dictPayloads = {}
        self._dictPayloads_headers = {}
        self._dictPayloads_params = {}
        self._dictHeaders = {}
        self._dictParams = {}

        self.status_flag = False
        self.table_flag = 0
        self.start_button_text = 'Run proxy'
        self._layout = GridBagLayout()
        self._jPanel.setLayout(self._layout)

        self._jPanel.setBounds(0, 0, 1000, 1000)
        self._jLabelTechniques = JLabel("Your URL (my.burpcollaborator.net):")
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 1
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints)

        self._jTextFieldURL = JTextField("", 30)
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 1
        self._jPanelConstraints.gridwidth = 4
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self._jTextFieldURL, self._jPanelConstraints)

        self._jLabelTechniques = JLabel("Press to start:")
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.anchor = GridBagConstraints.WEST
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 0
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints)

        self.submitSearchButton = swing.JButton(
            self.start_button_text, actionPerformed=self.active_flag)
        self.submitSearchButton.setBackground(Color.WHITE)
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 0
        self._jPanelConstraints.gridwidth = 4
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 10, 0)
        self._jPanel.add(self.submitSearchButton, self._jPanelConstraints)

        self._tableModelPayloads = DefaultTableModel()
        self._tableModelPayloads.addColumn("Payload")
        self._tableModelPayloads.addColumn("Using")

        self._tableModelHeaders = DefaultTableModel()
        self._tableModelHeaders.addColumn("Header")
        self._tableModelHeaders.addColumn("Using")

        self._tableModelParams = DefaultTableModel()
        self._tableModelParams.addColumn("Parameter")
        self._tableModelParams.addColumn("Using")

        self._table = JTable(self._tableModelPayloads)
        self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS)
        self._table.getModel().addTableModelListener(
            MyTableModelListener(self._table, self, 1))
        self._scrolltable = JScrollPane(self._table)
        self._scrolltable.setMinimumSize(Dimension(300, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 2
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 0, 10)
        self._jPanel.add(self._scrolltable, self._jPanelConstraints)

        self._table = JTable(self._tableModelHeaders)
        self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS)
        self._table.getModel().addTableModelListener(
            MyTableModelListener(self._table, self, 2))
        self._scrolltable = JScrollPane(self._table)
        self._scrolltable.setMinimumSize(Dimension(300, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 2
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 0, 10)
        self._jPanel.add(self._scrolltable, self._jPanelConstraints)

        self._table = JTable(self._tableModelParams)
        self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS)
        self._table.getModel().addTableModelListener(
            MyTableModelListener(self._table, self, 3))
        self._scrolltable = JScrollPane(self._table)
        self._scrolltable.setMinimumSize(Dimension(300, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 4
        self._jPanelConstraints.gridy = 2
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(0, 0, 0, 0)
        self._jPanel.add(self._scrolltable, self._jPanelConstraints)

        addPayloadButton = swing.JButton('Add',
                                         actionPerformed=self.addToPayload)
        addPayloadButton.setBackground(Color.WHITE)
        addPayloadButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 1
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 10)
        self._jPanel.add(addPayloadButton, self._jPanelConstraints)

        deletePayloadButton = swing.JButton(
            'Delete', actionPerformed=self.deleteToPayload)
        deletePayloadButton.setBackground(Color.WHITE)
        deletePayloadButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(deletePayloadButton, self._jPanelConstraints)

        addHeaderButton = swing.JButton('Add',
                                        actionPerformed=self.addToHeader)
        addHeaderButton.setBackground(Color.WHITE)
        addHeaderButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 3
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 10)
        self._jPanel.add(addHeaderButton, self._jPanelConstraints)

        deleteHeaderButton = swing.JButton('Delete',
                                           actionPerformed=self.deleteToHeader)
        deleteHeaderButton.setBackground(Color.WHITE)
        deleteHeaderButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(deleteHeaderButton, self._jPanelConstraints)

        addParamsButton = swing.JButton('Add',
                                        actionPerformed=self.addToParams)
        addParamsButton.setBackground(Color.WHITE)
        addParamsButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 5
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(addParamsButton, self._jPanelConstraints)

        deleteParamsButton = swing.JButton('Delete',
                                           actionPerformed=self.deleteToParams)
        deleteParamsButton.setBackground(Color.WHITE)
        deleteParamsButton.setPreferredSize(Dimension(150, 40))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 4
        self._jPanelConstraints.gridy = 3
        self._jPanelConstraints.gridwidth = 1
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(deleteParamsButton, self._jPanelConstraints)

        self._resultsTextArea = swing.JTextArea()
        resultsOutput = swing.JScrollPane(self._resultsTextArea)
        resultsOutput.setMinimumSize(Dimension(800, 200))
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        self._jPanelConstraints.gridx = 0
        self._jPanelConstraints.gridy = 4
        self._jPanelConstraints.gridwidth = 6
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(10, 0, 0, 0)
        self._jPanel.add(resultsOutput, self._jPanelConstraints)

        self.clearSearchButton = swing.JButton(
            'Clear Search Output', actionPerformed=self.clearOutput)
        self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL
        # self._jPanelConstraints.anchor = GridBagConstraints.CENTER
        self._jPanelConstraints.gridx = 2
        self._jPanelConstraints.gridy = 5
        self._jPanelConstraints.gridwidth = 2
        self._jPanelConstraints.gridheight = 1
        self._jPanelConstraints.insets = Insets(3, 0, 0, 0)
        self._jPanel.add(self.clearSearchButton, self._jPanelConstraints)

        self._callbacks.customizeUiComponent(self._jPanel)

        self._callbacks.addSuiteTab(self)
        # register ourselves as an HTTP listener
        self._callbacks.registerHttpListener(self)

        return
예제 #30
0
    def exportCodes(self, e):
        self.blankLog()
        self.siteMapData = self._callbacks.getSiteMap(None)
        # response codes to be included
        self.rcodes = []
        if self.uiRcode1xx.isSelected():
            self.rcodes += '1'
        if self.uiRcode2xx.isSelected():
            self.rcodes += '2'
        if self.uiRcode3xx.isSelected():
            self.rcodes += '3'
        if self.uiRcode4xx.isSelected():
            self.rcodes += '4'
        if self.uiRcode5xx.isSelected():
            self.rcodes += '5'

        if '3' in self.rcodes:
            self.colNames = ('Request', 'Referer', 'Response Code',
                             'Redirects To')
        else:
            self.colNames = ('Request', 'Referer', 'Response Code')
        self.tableData = []

        for i in self.siteMapData:
            self.requestInfo = self._helpers.analyzeRequest(i)
            self.url = self.requestInfo.getUrl()
            if self.scopeOnly() and not (self._callbacks.isInScope(self.url)):
                continue

            self.urlDecode = self._helpers.urlDecode(str(self.url))
            self.response = i.getResponse()
            if self.response == None:
                continue
            # Get referer if there is one
            self.requestHeaders = self.requestInfo.getHeaders()
            self.referer = ''
            for j in self.requestHeaders:
                if j.startswith('Referer:'):
                    self.fullReferer = j.split(' ')[1]
                    # drop the querystring parameter
                    self.referer = self.fullReferer.split('?')[0]
            # Get response code
            self.responseInfo = self._helpers.analyzeResponse(self.response)
            self.responseCode = self.responseInfo.getStatusCode()
            self.firstDigit = str(self.responseCode)[0]
            if self.firstDigit not in self.rcodes:
                continue
            if self.firstDigit in ['1', '2', '4',
                                   '5']:  # Return codes 1xx, 2xx, 4xx, 5xx
                self.tableData.append([
                    self.stripURLPort(self.urlDecode),
                    str(self.referer),
                    str(self.responseCode)
                ])
            elif self.firstDigit == '3':  # Return code 3xx Redirection
                self.requestHeaders = self.requestInfo.getHeaders()
                self.responseHeaders = self.responseInfo.getHeaders()
                for j in self.responseHeaders:
                    if j.startswith('Location:'):
                        self.location = j.split(' ')[1]
                self.tableData.append([
                    self.stripURLPort(self.urlDecode),
                    str(self.referer),
                    str(self.responseCode), self.location
                ])

        dataModel = DefaultTableModel(self.tableData, self.colNames)
        self.uiLogTable = swing.JTable(dataModel)
        self.uiLogTable.setAutoCreateRowSorter(True)
        self.uiLogPane.setViewportView(self.uiLogTable)