// Simplified traceroute using SYN packets to fool IDS's and filters // (C) 2001 by Sebastian Krahmer // sample program to demonstrace power of libUSI++ // licensed under the GPL // Don't run multiple instances of this program at the same // time. Also don't run normal traceroute meanwhile, sicne // they probably confuse each other. #include #include #include #include #include #include int udp_trace(char *, char *, char *, int); int tcp_trace(char *, char *, char *, int); int icmp_trace(char *, char *, char *, int); int ip_trace(char *, char *, char *, int); void usage() { cout<<"Usage: trace <-s src> <-d dst> [-T port] [-t type] [-D dev] [-U port] [-Ii]\n\n" "-U use normal UDP style trace to 'port'\n" "-T use TCP style trace (SYN) to 'port'\n" "-I use ICMP trace with type 'type' (defaults to ECHO_REPLY)\n" "-D use 'dev' for capturing. default eth0\n" "-i use raw IP packets for trace\n\n"; exit(0); } int main(int argc, char **argv) { int c; int type = 1, port = 53; bool udp = false, tcp = false, icmp = false, ip = false, dst = false, src = false; char source[1000], dest[1000], dev[10]; strcpy(dev, "eth0"); while ((c = getopt(argc, argv, "D:d:s:t:U:T:Ii")) != -1) { switch (c) { case 't': type = atoi(optarg); break; case 's': strncpy(source, optarg, sizeof(source)); src = true; break; case 'd': strncpy(dest, optarg, sizeof(dest)); dst = true; break; case 'U': udp = true; port = atoi(optarg); break; case 'T': tcp = true; port = atoi(optarg); break; case 'I': icmp = true; break; case 'D': strncpy(dev, optarg, sizeof(dev)); break; case 'i': ip = true; break; default: usage(); } } if (!dest || !src) usage(); cout<<"[=== IP datagrams to "<