diff options
author | Kenny Root <kenny@the-b.org> | 2015-04-19 22:35:01 -0700 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2015-04-19 22:44:34 -0700 |
commit | c960f1ef596e6b1393f18ece9b2bd74353eb115f (patch) | |
tree | a2e5e75d1ab5432294aafca7472215caa874e214 | |
parent | 852bd62cc255c1911deaf8a925648b86ecb4ccb3 (diff) | |
download | connectbot-c960f1ef596e6b1393f18ece9b2bd74353eb115f.tar.gz connectbot-c960f1ef596e6b1393f18ece9b2bd74353eb115f.tar.bz2 connectbot-c960f1ef596e6b1393f18ece9b2bd74353eb115f.zip |
telnet: try all addresses for host
Closes #46
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | src/org/connectbot/transport/Telnet.java | 19 |
2 files changed, 20 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 06e089d..0c563ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,8 +16,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - More context is given for failures to connect via SSH which should reveal why a host might be incompatible with ConnectBot. - SSH key exchange algorithm will now be printed upon connection. -- SSH: all addresses for a particular host will be tried when - connecting. This includes IPv6. +- All addresses for a particular host will be tried when connecting + (including IPv6). ## [1.8.3][1.8.3] - 2014-04-02 ### Fixed diff --git a/src/org/connectbot/transport/Telnet.java b/src/org/connectbot/transport/Telnet.java index 16cbd0e..ed8fc95 100644 --- a/src/org/connectbot/transport/Telnet.java +++ b/src/org/connectbot/transport/Telnet.java @@ -20,8 +20,11 @@ package org.connectbot.transport; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketException; +import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.nio.charset.Charset; import java.util.Map; @@ -123,10 +126,24 @@ public class Telnet extends AbsTransport { return PROTOCOL; } + private static void tryAllAddresses(Socket sock, String host, int port) throws IOException { + InetAddress[] addresses = InetAddress.getAllByName(host); + for (InetAddress addr : addresses) { + try { + sock.connect(new InetSocketAddress(addr, port)); + return; + } catch (SocketTimeoutException e) { + } + } + throw new SocketTimeoutException("Could not connect; socket timed out"); + } + @Override public void connect() { try { - socket = new Socket(host.getHostname(), host.getPort()); + socket = new Socket(); + + tryAllAddresses(socket, host.getHostname(), host.getPort()); connected = true; |