Here is a pretty good
link that shows how to accomplish this. The Wikipedia
link looks really good too. It also has some tips regarding how to periodically receive the status of the operation by suspending and resuming the process.
Basically, netcat is used to create a raw stream from one machine to another. You combine this with the dd program which will read a partition or an entire drive, byte by byte and pipe the output through the netcat pipe. You can also combine this with a compression algorithm, such as bzip or gzip to both compress the data stream and the image so that it takes less transfer time and less storage.
You can also make creative use of dd to fill up the unused space of the hard drive, prior to this operation. This will allow you to greatly deflate the amount of storage required because the whole blocks of zero data can be compressed to a small amount. This is shown in the Wikipedia link above, but you simply create a blank file with 'touch file.tmp' and then fill it with 'dd if=/dev/zero of=file.tmp bs=1M' The operation will 'error out' when the disk is full and then you can simply erase the file.
On the sending end, you will want to use a live CD instead of running from the hard drive being imaged. In fact you won't even want the partition/drive being imaged to be mounted. You also need to be *VERY* careful with the DD command. It takes a few parameters, most notably the IF (input file) and OF (output file), works on a very low level and is not forgiving. If you get these wrong, you WILL LOSE your information. This is why it is highly recommended that you back up critical data before using this command.