Packets:

I know some about them, but:

A) How can I catch one and read it (sniffer perhaps?)

B) Is there any way I can write one?

and

C) Is there any way to mess with the protocols that send them and/or which ports are used?