//This is a work in progress! //The irctranslate program will serve to translate any speech from IRC to google's translator //Then this new language will be displaid in the program's window //Released under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 licence //Comments are welcome! drzigman@bellsouth.net //Shouts to the Stankdawg, LogosX, tehbizz, rmpants, tiocsti, and all the members of the DDP //-Dr^ZigMan #include #include #include #include #define SIZE 512 void command_line(int argc,char *argv[],char device[],char filter_string[],char logfile[]); int main(int argc, char *argv[]) { //Declare variables //pcap related variables char device[SIZE]; //Holds the name of the device I'm using pcap_t *handle; //Session handle for pcap char errbuff[SIZE]; //Holds error messages for pcap struct bpf_program filter; //Where the compiled filter is held bpf_u_int32 ip; //IP of sniffing device char filter_string[SIZE]; //Holds the string form of the filter //IRC related variables char logfile[SIZE]; //Hold the name of the logfile for output //Google related variables //Program display related variables //handles command line arguments command_line(argc,argv,device,filter_string,logfile); //open device for sniffing handle = pcap_open_live(device, BUFSIZ, 0, 0, errbuff); //using device, with a buffer size of buffsize, do not set promis, no timeout, store errors in errbuff if (handle == NULL) { printf("\nFailed to open device %s, %s\n", device, errbuff); exit(2); } else { printf("Opened %s succsefully!\n", device); } //filter out all but the IRC traffic if ((pcap_compile(handle, &filter, filter_string, 0, ip)) == -1) //Using handle, store in struct filter, the compiled FILTER_STRING, no optimization, using ip { printf("Error with filter \"%s\": %s\n", filter_string, pcap_geterr(handle)); } else { printf("Filter \"%s\" compiled succsfully!...\n",filter_string); } //Actual sniffing //parse out string to translate //send to google for translation //get back from google's translation //display to the user } void command_line(int argc,char *argv[],char device[],char filter_string[],char logfile[]) { char usage[]= "Usage: irctranslate -i -p -l \n\n"; int c; int errflag = 0; //Hold if I need to print usage printf("\n"); //handles the options using getopt() do { c = getopt(argc, argv, ":hi:p:l:"); switch (c) { case 'h' : errflag++; break; case 'i' : strcpy(device,optarg); printf("Sniffing for IRC traffic on %s...\n",device); break; case 'l' : strcpy(logfile,optarg); printf("Using log file: %s\n",logfile); break; case 'p' : strcpy(filter_string,"tcp port "); strcat(filter_string, optarg); printf("Assuming port %s for IRC...\n",optarg); break; case ':' : printf("Option -%c requires an argument\n",optopt); errflag++; break; case '?' : printf("Invaild option: -%c\n",optopt); errflag++; break; //default : errflag++; } } while (c != -1); if (errflag) { printf(usage); exit(2); } return; }