38#endif 39 40 41extern char *optarg; 42extern int optind; 43#ifndef NO_IPF 44extern struct ipread snoop, pcap, etherf, iphex, tcpd, iptext; 45#endif 46 47int opts = 0; 48#ifndef DEFAULT_DEVICE 49# ifdef linux 50char default_device[] = "eth0"; 51# else 52# ifdef sun 53char default_device[] = "le0"; 54# else 55# ifdef ultrix 56char default_device[] = "ln0"; 57# else 58# ifdef __bsdi__ 59char default_device[] = "ef0"; 60# else 61# ifdef __sgi 62char default_device[] = "ec0"; 63# else 64char default_device[] = "lan0"; 65# endif 66# endif 67# endif 68# endif 69# endif 70#else 71char default_device[] = DEFAULT_DEVICE; 72#endif 73 74 75static void usage __P((char *)); 76int main __P((int, char **)); 77 78 79static void usage(prog) 80char *prog; 81{ 82 fprintf(stderr, "Usage: %s [options] <-r filename|-R filename>\n\ 83\t\t-r filename\tsnoop data file to resend\n\ 84\t\t-R filename\tlibpcap data file to resend\n\ 85\toptions:\n\ 86\t\t-d device\tSend out on this device\n\ 87\t\t-g gateway\tIP gateway to use if non-local dest.\n\ 88\t\t-m mtu\t\tfake MTU to use when sending out\n\ 89", prog); 90 exit(1); 91} 92 93 94int main(argc, argv) 95int argc; 96char **argv; 97{ 98 struct in_addr gwip; 99 struct ipread *ipr = NULL; 100 char *name = argv[0], *gateway = NULL, *dev = NULL; 101 char *resend = NULL; 102 int mtu = 1500, c; 103 104 while ((c = getopt(argc, argv, "EHPRSTXd:g:m:r:")) != -1) 105 switch (c) 106 { 107 case 'd' : 108 dev = optarg; 109 break; 110 case 'g' : 111 gateway = optarg; 112 break; 113 case 'm' : 114 mtu = atoi(optarg); 115 if (mtu < 28) 116 { 117 fprintf(stderr, "mtu must be > 28\n"); 118 exit(1); 119 } 120 case 'r' : 121 resend = optarg; 122 break; 123 case 'R' : 124 opts |= OPT_RAW; 125 break; 126#ifndef NO_IPF 127 case 'E' : 128 ipr = ðerf; 129 break; 130 case 'H' : 131 ipr = &iphex; 132 break; 133 case 'P' : 134 ipr = &pcap; 135 break; 136 case 'S' : 137 ipr = &snoop; 138 break; 139 case 'T' : 140 ipr = &tcpd; 141 break; 142 case 'X' : 143 ipr = &iptext; 144 break; 145#endif 146 default : 147 fprintf(stderr, "Unknown option \"%c\"\n", c); 148 usage(name); 149 } 150 151 if (!ipr || !resend) 152 usage(name); 153 154 gwip.s_addr = 0; 155 if (gateway && resolve(gateway, (char *)&gwip) == -1) 156 { 157 fprintf(stderr,"Cant resolve %s\n", gateway); 158 exit(2); 159 } 160 161 if (!dev) 162 dev = default_device; 163 164 printf("Device: %s\n", dev); 165 printf("Gateway: %s\n", inet_ntoa(gwip)); 166 printf("mtu: %d\n", mtu); 167 168 return ip_resend(dev, mtu, ipr, gwip, resend); 169}
|