📄 tcpinterceptor.java
字号:
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 + -