I'd recommend a few other books before diving into things like "Hacking Exposed".
For example, W. Richard Stevens' books, parituclarly TCP/IP Illustrated, Vols. I and II, Advanced Programming in the Unix Environment, and Unix Network Programming.
Then, Kernighan & Ritchie's C book.
Then, get yourself a packet sniffer. Watch ordinary traffic, and learn to recognize traffic at the packet level. Learn to understand what you're seeing at the frame and packet level. Learn the various header contents. Learn how various OSes behave with various protocols (e.g., the typical behavior a ping from a given OS exhibits, and how it pads the payload).
Learn the lifecycle of a packet, from its origination in the application layer, down through the physical layer, and up the receiving end's stack.
Once you've got that down, begin trying to understand the ways frames are handled by hubs, and packets by switches and routers. Learn the different ways in which different switches, hubs, and routers can handle traffic.
After that, you need a good, solid grounding in computers. Not, "That's a P4!", but "that chip architecture has this set of registers, so many pointers, and this instruction set". Go grab a copy of "Bebop to the Boolean Boogie" and "Bebop Bytes Back". They may sound and even look childish, but they're going to teach you how to program using an Altair IMSAI simulator, coding by flipping front-panel switches, loading memory locations one address at a time, and learning to observe the results by inferring the behavior of pointers and registers by watching a series of (simulated) LEDs.
If you didn't live through the period when this (or punch cards) were commonplace, you need this grounding. Without it, you'll never really understand what the computer's doing with the code it sees.
With a good understanding of how computers function at the machine-language (and assembly) level, a solid grounding in how TCP/IP works and how various devices make use of it, and a background in C programming, you're ready to tackle pretty much anything.
For example, W. Richard Stevens' books, parituclarly TCP/IP Illustrated, Vols. I and II, Advanced Programming in the Unix Environment, and Unix Network Programming.
Then, Kernighan & Ritchie's C book.
Then, get yourself a packet sniffer. Watch ordinary traffic, and learn to recognize traffic at the packet level. Learn to understand what you're seeing at the frame and packet level. Learn the various header contents. Learn how various OSes behave with various protocols (e.g., the typical behavior a ping from a given OS exhibits, and how it pads the payload).
Learn the lifecycle of a packet, from its origination in the application layer, down through the physical layer, and up the receiving end's stack.
Once you've got that down, begin trying to understand the ways frames are handled by hubs, and packets by switches and routers. Learn the different ways in which different switches, hubs, and routers can handle traffic.
After that, you need a good, solid grounding in computers. Not, "That's a P4!", but "that chip architecture has this set of registers, so many pointers, and this instruction set". Go grab a copy of "Bebop to the Boolean Boogie" and "Bebop Bytes Back". They may sound and even look childish, but they're going to teach you how to program using an Altair IMSAI simulator, coding by flipping front-panel switches, loading memory locations one address at a time, and learning to observe the results by inferring the behavior of pointers and registers by watching a series of (simulated) LEDs.
If you didn't live through the period when this (or punch cards) were commonplace, you need this grounding. Without it, you'll never really understand what the computer's doing with the code it sees.
With a good understanding of how computers function at the machine-language (and assembly) level, a solid grounding in how TCP/IP works and how various devices make use of it, and a background in C programming, you're ready to tackle pretty much anything.
Comment