diff options
| -rw-r--r-- | CHANGELOG.rdoc | 2 | ||||
| -rw-r--r-- | lib/net/ssh/proxy/socks5.rb | 26 |
2 files changed, 23 insertions, 5 deletions
diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index 6d80c37..889bb6b 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -2,6 +2,8 @@ === 2.0.13 / ?? Aug 2009 +* Applied patch for Socks5 negotiation fix [Gerald Talton] + * Added support for specifying a list of hosts in .ssh/config, with tests (GH-6) [Delano Mandelbaum] * Added tests for arcfour128/256/512 lengths, encryption, and decryption [Delano Mandelbaum] diff --git a/lib/net/ssh/proxy/socks5.rb b/lib/net/ssh/proxy/socks5.rb index 2d6918a..cc0642a 100644 --- a/lib/net/ssh/proxy/socks5.rb +++ b/lib/net/ssh/proxy/socks5.rb @@ -94,11 +94,27 @@ module Net packet << [port].pack("n") socket.send packet, 0 - - version, reply, = socket.recv(4).unpack("C*") - len = socket.recv(1).getbyte(0) - socket.recv(len + 2) - + + version, reply = socket.recv(2).unpack("C*") + socket.recv(1) + address_type = socket.recv(1).getbyte(0) + if ( address_type == 1 ) + socket.recv(4) # get four bytes for IPv4 address + else + if ( address_type == 3 ) + len = socket.recv(1).getbyte(0) + hostname = socket.recv(len) + else + if ( address_type == 4 ) + ipv6addr hostname = socket.recv(16) + else + socket.close + raise ConnectionError, "Illegal response type" + end + end + end + #portnum = socket.recv(2) + unless reply == SUCCESS socket.close raise ConnectError, "#{reply}" |
