⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpinterceptor.java

📁 JAVA开源LDAP浏览器jxplorer的源码!
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            switchButton.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    if (switchStr.equals(event.getActionCommand()))
                    {
                        int v = outPane.getOrientation();

                        if (v == 0)  // top/bottom
                            outPane.setOrientation(1);
                        else  // left/right
                            outPane.setOrientation(0);
                        outPane.setDividerLocation(0.5);
                    }
                }
            }
            );

            closeButton.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    if (close.equals(event.getActionCommand()))
                        close();
                }
            }
            );

            JSplitPane pane1 = new JSplitPane(0);

            pane1.setDividerSize(4);
            pane1.setTopComponent(tablePane);
            pane1.setBottomComponent(pane2);
            pane1.setDividerLocation(150);
            this.add(pane1, BorderLayout.CENTER);

            //
            ////////////////////////////////////////////////////////////////////
            sel.setSelectionInterval(0, 0);
            outPane.setDividerLocation(150);
            notebook.addTab(name, this);

              sel.addListSelectionListener(new ListSelectionListener()
            {
                public void valueChanged(ListSelectionEvent event)
                {
                    if (event.getValueIsAdjusting()) return;
                    ListSelectionModel m = (ListSelectionModel) event.getSource();
                    int divLoc = outPane.getDividerLocation();

                    if (m.isSelectionEmpty())
                    {
                        setLeft(new JLabel(" " + getMessage("wait00", "Waiting for Connection...")));
                        setRight(new JLabel(""));
                        removeButton.setEnabled(false);
                        removeAllButton.setEnabled(false);
                        saveButton.setEnabled(false);
                        resendButton.setEnabled(false);
                        sendButton.setEnabled(false);
                    }
                    else
                    {
                        int row = m.getLeadSelectionIndex();

                        if (row == 0)
                        {
                            if (connections.size() == 0)
                            {
                                setLeft(new JLabel(" " + getMessage("wait00", "Waiting for connection...")));
                                setRight(new JLabel(""));
                                removeButton.setEnabled(false);
                                removeAllButton.setEnabled(false);
                                saveButton.setEnabled(false);
                                resendButton.setEnabled(false);
                                sendButton.setEnabled(false);
                            }
                            else
                            {
                                Connection conn = (Connection) connections.lastElement();

                                setLeft(conn.inputScroll);
                                setRight(conn.outputScroll);
                                removeButton.setEnabled(false);
                                removeAllButton.setEnabled(true);
                                saveButton.setEnabled(true);
                                resendButton.setEnabled(true);
                            }
                        }
                        else
                        {
                            Connection conn = (Connection) connections.get(row - 1);

                            setLeft(conn.inputScroll);
                            setRight(conn.outputScroll);
                            removeButton.setEnabled(true);
                            removeAllButton.setEnabled(true);
                            saveButton.setEnabled(true);
                            resendButton.setEnabled(true);
                        }
                    }
                    outPane.setDividerLocation(divLoc);
                }
            }
            );

            start();
        }

        public void setLeft(Component left)
        {
            leftPanel.removeAll();
            leftPanel.add(left);
        }

        public void setRight(Component right)
        {
            rightPanel.removeAll();
            rightPanel.add(right);
        }

        public void start()
        {
            int port = Integer.parseInt(portField.getText());

            portField.setText("" + port);
            int i = notebook.indexOfComponent(this);

            notebook.setTitleAt(i, getMessage("port01", "Port") + " " + port);

            int tmp = Integer.parseInt(tPortField.getText());

            tPortField.setText("" + tmp);

            sw = new SocketWaiter(this, port);
            stopButton.setText(getMessage("stop00", "Stop"));

            portField.setEditable(false);
            hostField.setEditable(false);
            tPortField.setEditable(false);
            isProxyBox.setEnabled(false);
        }

        public void close()
        {
            stop();
            notebook.remove(this);
        }

        public void stop()
        {
            try
            {
                for (int i = 0; i < connections.size(); i++)
                {
                    Connection conn = (Connection) connections.get(i);

                    conn.halt();
                }
                sw.halt();
                stopButton.setText(getMessage("start00", "Start"));
                portField.setEditable(true);
                hostField.setEditable(true);
                tPortField.setEditable(true);
                isProxyBox.setEnabled(true);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }

        public void remove()
        {
            ListSelectionModel lsm = connectionTable.getSelectionModel();
            int bot = lsm.getMinSelectionIndex();
            int top = lsm.getMaxSelectionIndex();

            for (int i = top; i >= bot; i--)
            {
                ((Connection) connections.get(i - 1)).remove();
            }
            if (bot > connections.size()) bot = connections.size();
            lsm.setSelectionInterval(bot, bot);
        }

        public void removeAll()
        {
            ListSelectionModel lsm = connectionTable.getSelectionModel();
            lsm.clearSelection();
            while (connections.size() > 0)
                ((Connection) connections.get(0)).remove();

            lsm.setSelectionInterval(0, 0);
        }

        public void save()
        {
            JFileChooser dialog = new JFileChooser(".");
            int rc = dialog.showSaveDialog(this);

            if (rc == JFileChooser.APPROVE_OPTION)
            {
                try
                {
                    File file = dialog.getSelectedFile();
                    FileOutputStream out = new FileOutputStream(file);

                    ListSelectionModel lsm = connectionTable.getSelectionModel();

                    rc = lsm.getLeadSelectionIndex();
                    if (rc == 0) rc = connections.size();
                    Connection conn = (Connection) connections.get(rc - 1);

                    rc = Integer.parseInt(portField.getText());
                    out.write((new String(getMessage("listenPort01", "Listen Port:") + " " + rc + "\n")).getBytes());
                    out.write((new String(getMessage("targetHost01", "Target Host:") + " " + hostField.getText() +
                            "\n")).getBytes());
                    rc = Integer.parseInt(tPortField.getText());
                    out.write((new String(getMessage("targetPort01", "Target Port:") + " " + rc + "\n")).getBytes());

                    out.write((new String("==== " + getMessage("request01", "Request") + " ====\n")).getBytes());
                    out.write(conn.inputText.getText().getBytes());

                    out.write((new String("==== " + getMessage("response00", "Response") + " ====\n")).getBytes());
                    out.write(conn.outputText.getText().getBytes());

                    out.close();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }

        public void resend()
        {
            int rc;

            try
            {
                ListSelectionModel lsm = connectionTable.getSelectionModel();

                rc = lsm.getLeadSelectionIndex();
                if (rc == 0) rc = connections.size();
                Connection conn = (Connection) connections.get(rc - 1);

                if (rc > 0)
                {
                    lsm.clearSelection();
                    lsm.setSelectionInterval(0, 0);
                }

                InputStream in = null;
                String text = conn.inputText.getText();

                text = fixContentLengthHeaders(text);

                in = new ByteArrayInputStream(text.getBytes());
                new Connection(this, in);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }

    }


    public TCPInterceptor(int listenPort, String targetHost, int targetPort)
    {
        super(getMessage("tcpint00", "TCPInterceptor"));

        notebook = new JTabbedPane();
        this.getContentPane().add(notebook);

        new AdminPage(notebook, getMessage("admin00", "Admin"));

        if (listenPort != 0)
        {
            Listener l = null;

            if (targetHost == null)
                l = new Listener(notebook, null, listenPort,
                        targetHost, targetPort, true);
            else
                l = new Listener(notebook, null, listenPort,
                        targetHost, targetPort, false);
            notebook.setSelectedIndex(1);

            l.HTTPProxyHost = System.getProperty("http.proxyHost");
            if (l.HTTPProxyHost != null && l.HTTPProxyHost.equals(""))
                l.HTTPProxyHost = null;

            if (l.HTTPProxyHost != null)
            {
                String tmp = System.getProperty("http.proxyPort");

                if (tmp != null && tmp.equals("")) tmp = null;
                if (tmp == null)
                    l.HTTPProxyPort = 80;
                else
                    l.HTTPProxyPort = Integer.parseInt(tmp);
            }
        }

        this.pack();
        this.setSize(800, 600);
        this.setVisible(true);
    }

    protected void processWindowEvent(WindowEvent event)
    {
        switch (event.getID())
        {
            case WindowEvent.WINDOW_CLOSING:
                exit();
                break;

            default:
                super.processWindowEvent(event);
                break;
        }
    }

    /**
     * A utility method that sorts out the correct content length headers
     * for a post/get request.
     * @param text the http text to correct (or simply confirm).
     * @return the text, modified with correct content length
     */
    private static String fixContentLengthHeaders(String text)
    {
        // Fix Content-Length HTTP headers
        if (text.startsWith("POST ") || text.startsWith("GET "))
        {
            int pos1, pos2, pos3;
            String body, headers, headers1, header2;

            pos3 = text.indexOf("\n\n");
            if (pos3 == -1)
            {
                pos3 = text.ind

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -