如何从java程序中通过防火墙

时间:2013-03-20 13:54:18

标签: java firewall telnet jsch

好的,这是我的问题。

我在我的本地工作站上工作。我有一些机器在防火墙后面,我需要从java代码登录到这台机器。为此,我想使用JSch库。如果我把这台机器的IP地址放到网页浏览器上,我会被重定向到防火墙登录页面,当我输入我的凭据时,我可以使用带有此代码的ssh登录到这台机器:

public void authenticate(String ip, String user, String password) {
    JSch jsch=new JSch();
    try {
        Session session = jsch.getSession(user, ip, 22);
        session.setPassword(password);
        session.setUserInfo(new UserInfoImpl(password));
        session.connect();
        System.out.println("Yes!!");
        session.disconnect();
    } catch (JSchException e) {
        e.printStackTrace();
    }
}

private class UserInfoImpl implements UserInfo{

    private String password;
    public UserInfoImpl(String password){
        this.password = password;
    }

    @Override
    public String getPassphrase() { return null;}
    @Override
    public String getPassword() {return password;}
    @Override
    public boolean promptPassphrase(String arg0) {return true;}
    @Override
    public boolean promptPassword(String arg0) {return true;}
    @Override
    public boolean promptYesNo(String arg0) {return true;}
    @Override
    public void showMessage(String arg0) {}

}

但是我的程序应该自动登录到防火墙。如果我从Windows命令行使用telnet(端口23)而不是ssh(端口22),则可以从那里登录到此防火墙。

是否可以从java代码(使用JSch或其他一些java库)登录此防火墙?

2 个答案:

答案 0 :(得分:2)

盲目连接到端口22可能不会将您引导到防火墙的网页,因此JSch不会为您处理。连接时,您将引发异常。捕获此然后您可以使用普通的http调用端口80触发防火墙重定向,然后获取重定向,解析结果并使用正确的表单数据发送HTTP POST。

如果防火墙表单和地址始终相同,您可以在尝试连接SSH之前直接发送POST。

您可以使用标准类,请参阅 Java - sending HTTP parameters via POST method easily

答案 1 :(得分:0)

令人惊讶的是,一旦您登录到您的代理,您就可以访问远程计算机的端口22,但无论如何......

JSch不会帮助您,但您可以使用能够处理正确代理身份验证机制的HTTP客户端轻松模拟您的Web浏览器在Java中所执行的操作。

从Java 6开始,提供的URLConnection可以处理NTLM(除SOCKS和HTTP代理之外)。无论如何,我建议使用HttpClient 4.2.x,它将提供更多选项和灵活性,以帮助您调试任何问题。