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
handshake.writeByte(0x00); // null terminating the string
handshake.writeBytes(hostNameBytes); // remote host name to connect to