I am studying ssh and I haven't understood the following command with option D
ssh -D 9999 username@remotehost.net
can someone explain what this command does exactly with an example and when it is useful?
This will forward all packets to remotehost.net from localhost:9999 (in your example). In a nutshell this is socks proxy.
From ssh man page:
Specifies a local “dynamic” application-level port forwarding. This works by allocating a socket to listen to port on the local side, optionally bound to the specified bind_address. Whenever a connection is made to this port, the connection is forwarded over the secure channel, and the application protocol is then used to determine where to connect to from the remote machine. Currently the SOCKS4 and SOCKS5 protocols are supported, and ssh will act as a SOCKS server. Only root can forward privileged ports. Dynamic port forwardings can also be specified in the configuration file.