⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trace.cc

📁 xprobe package sources code
💻 CC
字号:
// 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 <iostream.h>#include <usi++/usi++.h>#include <usi++/tcp.h>#include <unistd.h>#include <string.h>#include <stdlib.h>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 "<<dest<<" are routed through ===]\n\n";	if (udp)		udp_trace(dest, source, dev, port);	else if (tcp)		tcp_trace(dest, source, dev, port);	else if (icmp)		icmp_trace(dest, source, dev, type);	else if (ip)		ip_trace(dest, source, dev, type);	else 		cerr<<"You must at least give me UDP,TCP,ICMP or IP!\n";	cout<<endl;	return 0;}int ip_trace(char *dst, char *src, char *dev, int type){	char buf[1000], buf2[1000];	ICMP sn("127.0.0.1");	IP ip(dst, type);		ip.set_src(src);		sn.init_device(dev, 0, 500);	sn.setfilter("icmp and (icmp[0] == 11 or icmp[0] == 0 or icmp[0] == 3)");		for (int i = 1; i < 64; i++) {		memset(buf, 0, sizeof(buf));		memset(buf2, 0, sizeof(buf2));		ip.set_ttl(i);		ip.sendpack("");		sn.sniffpack(NULL, 0);				cout<<"  "<<i<<"  "<<sn.get_src(1, buf, 100)<<" ("<<sn.get_src(0,buf2,100)<<")\n";		if (sn.get_type() == 3 || sn.get_type() == 0)			break;	}	return 0;}	int icmp_trace(char *dst, char *src, char *dev, int type){	char buf[1000], buf2[1000];	ICMP sn("127.0.0.1");	ICMP icmp(dst);		icmp.set_src(src);	icmp.set_type(type);		sn.init_device(dev, 0, 500);	sn.setfilter("icmp and (icmp[0] == 11 or icmp[0] == 0 or icmp[0] == 3)");		for (int i = 1; i < 64; i++) {		memset(buf, 0, sizeof(buf));		memset(buf2, 0, sizeof(buf2));		icmp.set_ttl(i);		icmp.sendpack("");		sn.sniffpack(NULL, 0);				cout<<"  "<<i<<"  "<<sn.get_src(1, buf, 100)<<" ("<<sn.get_src(0,buf2,100)<<")\n";		if (sn.get_type() == 3 || sn.get_type() == 0)			break;	}	return 0;}	int udp_trace(char *dst, char *src, char *dev, int port){	char buf[1000], buf2[1000];	ICMP sn("127.0.0.1");	UDP udp(dst);		udp.set_src(src);	udp.set_dstport(port);	udp.set_srcport(53);		sn.init_device(dev, 0, 500);	sn.setfilter("icmp and (icmp[0] == 11 or icmp[0] == 3)");		for (int i = 1; i < 64; i++) {		memset(buf, 0, sizeof(buf));		memset(buf2, 0, sizeof(buf2));		udp.set_ttl(i);		udp.sendpack("");		sn.sniffpack(NULL, 0);				cout<<"  "<<i<<"  "<<sn.get_src(1, buf, 100)<<" ("<<sn.get_src(0,buf2,100)<<")\n";		if (sn.get_type() == 3)			break;	}	return 0;}	int tcp_trace(char *dst, char *src, char *dev, int port){	TCP tcp(dst);	IP sn("127.0.0.1", 123);		char buf[100], buf2[100];		tcp.set_dstport(port);	tcp.set_src(src);	tcp.set_srcport(1234);	tcp.set_flags(TH_PUSH);	sn.init_device(dev, 0, 500);	sn.setfilter("(icmp and icmp[0] == 11) or (tcp and dst port 1234)");		for (int i = 1; i < 64; i++) {		memset(buf, 0, sizeof(buf));		memset(buf2, 0, sizeof(buf2));				tcp.set_ttl(i);		tcp.sendpack("");		sn.sniffpack(NULL, 0);				cout<<"  "<<i<<"  "<<sn.get_src(1, buf, 100)<<" ("<<sn.get_src(0,buf2,100)<<")\n";		if (sn.get_proto() == IPPROTO_TCP)			break;	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -