A method for automatically generating a fuzzer and testing a network device using the fuzzer, the method comprising:
- receiving as input, a functional description of a network communications protocol finite state machine and a protocol data unit (PDU) description, the functional description of the network communications protocol including meta-comments that identify fields of the PDU description relevant to functionality of the state machine;
- simulating, using the functional description of the network communications protocol finite state machine and the PDU description, operation of the protocol to generate a set of valid conversations in the protocol;
- generating, based on the simulation, a fuzzer and a fuzzer model, wherein the fuzzer model includes a process representing the fuzzer and a process representing a device under test (DUT), wherein generating the fuzzer includes automatically linking the functional description with the fields of the PDU description relevant to functionality of the state machine using the meta-comments;
- simulating the fuzzer model to extract expected conversations between the fuzzer and the DUT;
- using the fuzzer to send messages to test the DUT;
- and
- analyzing responses of the DUT to the messages generated by the fuzzer by comparing responses generated by the fuzzer to messages from the expected conversations generated by the simulation of the fuzzer model.