int main(int argc, char **argv){ char* interface = argv[1]; unsigned char *packet_header; struct sockaddr sa; int sock, ethhdr_len; uint16_t len ; unsigned char buffer[100] ; struct frame header ; FILE *fp; struct ifreq ethreq; long int counter = 0; if(argc != 6){ printf("Wrong number of arguments\n") ; printf("Usage:\n\t./node interface <input file> <own mac> <router mac> <output file>\n\n") ; exit(0) ; } outFile = argv[5] ; sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); if (sock == -1) { printf("when opening socket in PAListener"); } fp = fopen(argv[2], "rb") ; if(fp == NULL) printf("No such file exists\n") ; header.type = 0x4e ; BindRawSocketToInterface(argv[1], sock, ETH_P_ALL); CreateEthernetHeader(&header, argv[3], argv[4], ETH_P_ALL); ethhdr_len = sizeof(struct sniff_ethernet); pthread_t interfaceSniffer; int res ; res = pthread_create(&interfaceSniffer, NULL, sniffer, (void *)sock); if( res != 0){ fprintf(stderr, "TCP read thread creation failed\n") ; exit(EXIT_FAILURE) ; } printf("hello\n") ; int wait ; scanf("Enter when ready %d", &wait) ; while(!feof(fp)){ if (fscanf(fp, "%s" , header.buf) == EOF) break ; printf("Sent %s\n", header.buf) ; if(write(sock,&header,ethhdr_len+FRAME_LEN) < 0){ perror("sendto"); } usleep(100) ; } pthread_join(interfaceSniffer, NULL) ; }
/* argv[1] is the device e.g. eth0 argv[2] is the number of packets to send */ int main(int argc, char **argv){ if (argc < 1){ perror("Arguments?\n"); return 1; } int raw; unsigned char* packet; struct ethhdr *ethernet_header; struct iphdr *ip_header; struct tcphdr *tcp_header; unsigned char *data; int num_of_pkts; int pkt_len; /* Create the raw socket */ raw = CreateRawSocket(ETH_P_ALL); /* Bind raw socket to interface */ BindRawSocketToInterface(argv[1], raw, ETH_P_ALL); //num_of_pkts = atoi(argv[2]); ethernet_header = CreateEthernetHeader(); ip_header = CreateIPHeader(); tcp_header = CreateTcpHeader(); data = CreateData(DATA_SIZE); /* Create PseudoHeader and compute TCP Checksum */ CreatePseudoHeaderAndComputeTcpChecksum(tcp_header, ip_header, data); //pkt_len = sizeof(struct ethhdr) + sizeof(struct iphdr); pkt_len = sizeof(struct ethhdr) + ntohs(ip_header->tot_len); packet = (unsigned char *) malloc(pkt_len); memcpy(packet, ethernet_header, sizeof(struct ethhdr)); memcpy((packet + sizeof(struct ethhdr)), ip_header, ip_header->ihl*4); memcpy((packet + sizeof(struct ethhdr) + ip_header->ihl*4),tcp_header, tcp_header->doff*4); memcpy((packet + sizeof(struct ethhdr) + ip_header->ihl*4 + tcp_header->doff*4), data, DATA_SIZE); //while((num_of_pkts--)>0){ if(!SendRawPacket(raw, packet, pkt_len)) perror("Error sending packet"); else printf("Packet sent successfully\n"); //} /*free(ethernet_header); free(ip_header); free(tcp_header); free(data); free(packet);*/ close(raw); return 0; }