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

📄 urlsnarf.c

📁 一个网络工具包,可以嗅探email和http等数据包中的密码等信息.注意要先把libnet-1.0.2a.tar.gz和 libnids-1.16.tar.gz装上,不然会因为缺少库函数而无法编译和安
💻 C
字号:
/*  urlsnarf.c    Sniff the network for HTTP request URLs, output in CLF format.  Copyright (c) 1999 Dug Song <dugsong@monkey.org>  $Id: urlsnarf.c,v 1.33 2000/12/19 02:53:36 dugsong Exp $*/#include "config.h"#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <regex.h>#include <time.h>#include <err.h>#include <libnet.h>#include <nids.h>#include <pcap.h>#include "pcaputil.h"#include "buf.h"#include "base64.h"#include "version.h"#define DEFAULT_PCAP_FILTER "tcp port 80 or port 8080 or port 3128"u_short		Opt_dns = 1;int		Opt_invert = 0;regex_t	       *pregex = NULL;voidusage(void){	fprintf(stderr, "Version: " VERSION "\n"		"Usage: urlsnarf [-n] [-i interface] [[-v] pattern [expression]]\n");	exit(1);}intregex_match(char *string){	return (pregex == NULL ||		((regexec(pregex, string, 0, NULL, 0) == 0) ^ Opt_invert));}char *timestamp(void){	static char tstr[32], sign;	struct tm *t, gmt;	time_t tt = time(NULL);	int days, hours, tz, len;		gmt = *gmtime(&tt);	t = localtime(&tt);		days = t->tm_yday - gmt.tm_yday;	hours = ((days < -1 ? 24 : 1 < days ? -24 : days * 24) +		 t->tm_hour - gmt.tm_hour);	tz = hours * 60 + t->tm_min - gmt.tm_min;		len = strftime(tstr, sizeof(tstr), "%e/%b/%Y:%X", t);	if (len < 0 || len > sizeof(tstr) - 5)		return (NULL);		if (tz < 0) {		sign = '-';		tz = -tz;	}	else sign = '+';		snprintf(tstr + len, sizeof(tstr) - len, " %c%.2d%.2d",		 sign, tz / 60, tz % 60);		return (tstr);}intprocess_http_request(struct tuple4 *addr, u_char *data, int len){	struct buf *msg, buf;	char *p, *req, *uri, *user, *vhost, *referer, *agent;	int i;	buf_init(&buf, data, len);		while ((i = buf_index(&buf, "\r\n\r\n", 4)) >= 0) {		msg = buf_tok(&buf, NULL, i);		msg->base[msg->end] = '\0';		buf_skip(&buf, 4);				if (!regex_match(buf_ptr(msg)))			continue;				if ((req = strtok(buf_ptr(msg), "\r\n")) == NULL)			continue;				if (strncmp(req, "GET ", 4) != 0 &&		    strncmp(req, "POST ", 5) != 0 &&		    strncmp(req, "CONNECT ", 8) != 0)			continue;				if ((uri = strchr(req, ' ')) == NULL)			continue;		*uri++ = '\0';		user = vhost = referer = agent = NULL;				while ((p = strtok(NULL, "\r\n")) != NULL) {			if (strncasecmp(p, "Authorization: Basic ", 21) == 0) {				p += 21;				i = base64_pton(p, p, strlen(p));				p[i] = '\0';				user = p;				if ((p = strchr(p, ':')) != NULL)					*p = '\0';			}			else if (strncasecmp(p, "Host: ", 6) == 0) {				vhost = p + 6;			}			else if (strncasecmp(p, "Referer: ", 9) == 0) {				referer = p + 9;			}			else if (strncasecmp(p, "User-Agent: ", 12) == 0) {				agent = p + 12;			}			else if (strncasecmp(p, "Content-length: ", 16) == 0) {				i = atoi(p + 16);				buf_tok(NULL, NULL, i);			}		}		if (user == NULL)			user = "-";		if (vhost == NULL)			vhost = libnet_host_lookup(addr->daddr, Opt_dns);		if (referer == NULL)			referer = "-";		if (agent == NULL)			agent = "-";				printf("%s - %s [%s] \"%s http://%s%s\" - - \"%s\" \"%s\"\n",		       libnet_host_lookup(addr->saddr, Opt_dns),		       user, timestamp(), req, vhost, uri, referer, agent);	}	fflush(stdout);		return (len - buf_len(&buf));}voidsniff_http_client(struct tcp_stream *ts, void **yoda){	int i;		switch (ts->nids_state) {	case NIDS_JUST_EST:		ts->server.collect = 1;			case NIDS_DATA:		if (ts->server.count_new != 0) {			i = process_http_request(&ts->addr, ts->server.data,						 ts->server.count -						 ts->server.offset);			nids_discard(ts, i);		}		break;			default:		if (ts->server.count != 0) {			process_http_request(&ts->addr, ts->server.data,					     ts->server.count -					     ts->server.offset);		}		break;	}}voidnull_syslog(int type, int errnum, struct ip *iph, void *data){}intmain(int argc, char *argv[]){	int c;		while ((c = getopt(argc, argv, "i:nvh?V")) != -1) {		switch (c) {		case 'i':			nids_params.device = optarg;			break;		case 'n':			Opt_dns = 0;			break;		case 'v':			Opt_invert = 1;			break;		default:			usage();		}	}	argc -= optind;	argv += optind;	if (argc > 0 && strlen(argv[0])) {		if ((pregex = (regex_t *) malloc(sizeof(*pregex))) == NULL)			err(1, "malloc");		if (regcomp(pregex, argv[0], REG_EXTENDED|REG_NOSUB) != 0)			errx(1, "invalid regular expression");	}	if (argc > 1) {		nids_params.pcap_filter = copy_argv(argv + 1);	}	else nids_params.pcap_filter = DEFAULT_PCAP_FILTER;		nids_params.scan_num_hosts = 0;	nids_params.syslog = null_syslog;		if (!nids_init())		errx(1, "%s", nids_errbuf);		nids_register_tcp(sniff_http_client);	warnx("listening on %s [%s]", nids_params.device,	      nids_params.pcap_filter);	nids_run();		/* NOTREACHED */		exit(0);}

⌨️ 快捷键说明

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