/** * Programma per generare codice C (array) di pacchetti di vari protocolli, * anche concatenati */ int main(int argc, char *argv[]) { if(argc < 3) { printf("use:\n\t%s ... eth ip tcp data", argv[0]); return 0; } int i; packet_t *p = packet_create(argv[argc-1], strlen(argv[argc-1])); for(i = (argc - 2); i > 0; i--) { if(add_proto(p, argv[i])) printf("%s added\n", argv[i]); else { printf("unknow protocol %s\n", argv[i]); return 0; } } printf("%d\n\n", p->size); char *c_data = (char *) malloc(p->size * 6 + 30); strcpy(c_data, "char test_packet[] = {\t"); for(i = 0; i < p->size; i++) { char t_data[8]; sprintf(t_data, "0x%.2X", p->data[i]); strcat(c_data, t_data); if(i < p->size -1) { if(((i % 7) == 0) && i > 3) strcat(c_data, ",\n\t\t\t\t\t\t"); else strcat(c_data, ", "); } } strcat(c_data, " };\n"); char t_data[8]; sprintf(t_data, "%d", p->size); strcat(c_data, "packet_t *pack = packet_create(test_packet, "); strcat(c_data, t_data); strcat(c_data, ");\n\n"); printf("\n%s\n", c_data); return 0; }
void parse_proto(ipfw_insn **cmd, int *ac, char **av[]) { add_proto(*cmd, **av); NEXT_ARG1; }