void printGPktPayload(gpacket_t *msg, int level) { int prot; prot = printEthernetHeader(msg); switch (prot) { case IP_PROTOCOL: prot = printIPPacket(msg); switch (prot) { case ICMP_PROTOCOL: printICMPPacket(msg); break; case UDP_PROTOCOL: printUDPPacket(msg); case TCP_PROTOCOL: printTCPPacket(msg); } break; case ARP_PROTOCOL: printARPPacket(msg); break; default: // ignore other cases for now! break; } }
void dataFrameHandler(u_char *handlerParams, const struct pcap_pkthdr *header, const u_char *data) { struct ethernetHeader *ethHdr; static int packetNum = 0; ethHdr = (struct ethernetHeader *)(data); fprintf(stdout, "\nPacket number: %d Packet Len: %d\n\n", ++packetNum, header->len); printEthernetHeader(ethHdr); switch (ntohs(ethHdr->segmentType)) { case 0x0800: parseIpSegment(data + sizeof(struct ethernetHeader)); break; case 0x806: parseArpSegment(data + sizeof(struct ethernetHeader)); break; default: break; } }