Created
April 2, 2010 03:37
-
-
Save ymnk/352717 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ | |
import com.jcraft.jsch.*; | |
import java.awt.*; | |
import javax.swing.*; | |
import java.net.*; | |
public class StreamForwarding{ | |
public static void main(String[] arg){ | |
int port; | |
try{ | |
ServerSocket ss = new ServerSocket(8888); // | |
Socket s = ss.accept(); // | |
JSch jsch=new JSch(); | |
String host=null; | |
if(arg.length>0){ | |
host=arg[0]; | |
} | |
else{ | |
host=JOptionPane.showInputDialog("Enter username@hostname", | |
System.getProperty("user.name")+ | |
"@localhost"); | |
} | |
String user=host.substring(0, host.indexOf('@')); | |
host=host.substring(host.indexOf('@')+1); | |
Session session=jsch.getSession(user, host, 22); | |
// username and password will be given via UserInfo interface. | |
UserInfo ui=new MyUserInfo(); | |
session.setUserInfo(ui); | |
session.connect(); | |
String foo=JOptionPane.showInputDialog("Enter host and port", | |
"host:port"); | |
host=foo.substring(0, foo.indexOf(':')); | |
port=Integer.parseInt(foo.substring(foo.indexOf(':')+1)); | |
System.out.println("System.{in,out} will be forwarded to "+ | |
host+":"+port+"."); | |
Channel channel=session.openChannel("direct-tcpip"); | |
// ((ChannelDirectTCPIP)channel).setInputStream(System.in); | |
// ((ChannelDirectTCPIP)channel).setOutputStream(System.out); | |
((ChannelDirectTCPIP)channel).setInputStream(s.getInputStream()); // | |
((ChannelDirectTCPIP)channel).setOutputStream(s.getOutputStream()); // | |
((ChannelDirectTCPIP)channel).setHost(host); | |
((ChannelDirectTCPIP)channel).setPort(port); | |
channel.connect(); | |
} | |
catch(Exception e){ | |
System.out.println(e); | |
} | |
} | |
public static class MyUserInfo implements UserInfo, UIKeyboardInteractive{ | |
public String getPassword(){ return passwd; } | |
public boolean promptYesNo(String str){ | |
Object[] options={ "yes", "no" }; | |
int foo=JOptionPane.showOptionDialog(null, | |
str, | |
"Warning", | |
JOptionPane.DEFAULT_OPTION, | |
JOptionPane.WARNING_MESSAGE, | |
null, options, options[0]); | |
return foo==0; | |
} | |
String passwd; | |
JTextField passwordField=(JTextField)new JPasswordField(20); | |
public String getPassphrase(){ return null; } | |
public boolean promptPassphrase(String message){ return true; } | |
public boolean promptPassword(String message){ | |
Object[] ob={passwordField}; | |
int result= | |
JOptionPane.showConfirmDialog(null, ob, message, | |
JOptionPane.OK_CANCEL_OPTION); | |
if(result==JOptionPane.OK_OPTION){ | |
passwd=passwordField.getText(); | |
return true; | |
} | |
else{ return false; } | |
} | |
public void showMessage(String message){ | |
JOptionPane.showMessageDialog(null, message); | |
} | |
final GridBagConstraints gbc = | |
new GridBagConstraints(0,0,1,1,1,1, | |
GridBagConstraints.NORTHWEST, | |
GridBagConstraints.NONE, | |
new Insets(0,0,0,0),0,0); | |
private Container panel; | |
public String[] promptKeyboardInteractive(String destination, | |
String name, | |
String instruction, | |
String[] prompt, | |
boolean[] echo){ | |
panel = new JPanel(); | |
panel.setLayout(new GridBagLayout()); | |
gbc.weightx = 1.0; | |
gbc.gridwidth = GridBagConstraints.REMAINDER; | |
gbc.gridx = 0; | |
panel.add(new JLabel(instruction), gbc); | |
gbc.gridy++; | |
gbc.gridwidth = GridBagConstraints.RELATIVE; | |
JTextField[] texts=new JTextField[prompt.length]; | |
for(int i=0; i<prompt.length; i++){ | |
gbc.fill = GridBagConstraints.NONE; | |
gbc.gridx = 0; | |
gbc.weightx = 1; | |
panel.add(new JLabel(prompt[i]),gbc); | |
gbc.gridx = 1; | |
gbc.fill = GridBagConstraints.HORIZONTAL; | |
gbc.weighty = 1; | |
if(echo[i]){ | |
texts[i]=new JTextField(20); | |
} | |
else{ | |
texts[i]=new JPasswordField(20); | |
} | |
panel.add(texts[i], gbc); | |
gbc.gridy++; | |
} | |
if(JOptionPane.showConfirmDialog(null, panel, | |
destination+": "+name, | |
JOptionPane.OK_CANCEL_OPTION, | |
JOptionPane.QUESTION_MESSAGE) | |
==JOptionPane.OK_OPTION){ | |
String[] response=new String[prompt.length]; | |
for(int i=0; i<prompt.length; i++){ | |
response[i]=texts[i].getText(); | |
} | |
return response; | |
} | |
else{ | |
return null; // cancel | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment