byte[] userBytes = System.getProperty("user.name", "").getBytes();
byte[] hostNameBytes = hostName.getBytes();
ChannelBuffer handshake = ChannelBuffers.dynamicBuffer(10 + userBytes.length + hostNameBytes.length);
handshake.writeByte(SOCKS_VERSION_4); // SOCKS version
handshake.writeByte(CONNECT); // CONNECT
handshake.writeShort(port); // port
handshake.writeByte(0x00); // fake ip
handshake.writeByte(0x00); // fake ip
handshake.writeByte(0x00); // fake ip
handshake.writeByte(0x01); // fake ip
handshake.writeBytes(userBytes); // user name