I really want to create a network sniffer. What kind of topics do I need to understand to create a simple one?
Yes, don't create multiple threads on the same topic. What I would do is look into a packet sniffing library like libnet, or pcap, etc. The wireshark one would be best probably. You may need to learn how to do C-calls from C# in order to get stuff working, but if I remember correctly there should be some sort of port or wrapper online which is open source, you just have to google the right stuff. I always had problems doing packet sniffing in C#/higher level languages, because of getting the darn old stuff to compile correctly, and then getting the C-calls working correctly. I eventually gave up the process. The way I see it, the higher level languages like C#/Java have abstracted themselves away from their users being able to do low level things. It is a real battle to be able to do low level operations in highly abstracted languages. We have built ourselves a tower of abstraction, so now the low level things are not easy to accomplish any more. I believe that one of the libraries I tried to use was actually some kind of static library or something, I don't think C# even supports that anymore. If anybody has actually done this, I could learn a lot too if the road was paved a little bit first...