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

📄 decode_http.c

📁 一个网络工具包,可以嗅探email和http等数据包中的密码等信息.注意要先把libnet-1.0.2a.tar.gz和 libnids-1.16.tar.gz装上,不然会因为缺少库函数而无法编译和安
💻 C
字号:
/*  decode_http.c  Hypertext Transfer Protocol.  Copyright (c) 2000 Dug Song <dugsong@monkey.org>   $Id: decode_http.c,v 1.16 2000/12/18 23:38:05 dugsong Exp $*/#include "config.h"#include <sys/types.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <regex.h>#include <libgen.h>#include <err.h>#include "base64.h"#include "buf.h"#include "decode.h"#define USER_REGEX	".*account.*|.*acct.*|.*domain.*|.*login.*|" \			".*member.*|.*user.*|.*name|.*email|.*_id|" \			"id|uid|mn|mailaddress"			#define PASS_REGEX	".*pass.*|.*pw|pw.*|additional_info"#define REGEX_FLAGS	(REG_EXTENDED | REG_ICASE | REG_NOSUB)static regex_t		*user_regex, *pass_regex;static intgrep_query_auth(char *buf){	char *p, *q, *tmp;	int user, pass;	user = pass = 0;		if ((tmp = strdup(buf)) == NULL)		return (0);		for (p = strtok(tmp, "&"); p != NULL; p = strtok(NULL, "&")) {		if ((q = strchr(p, '=')) == NULL)			continue;		*q = '\0';					if (!user) {			if (regexec(user_regex, p, 0, NULL, 0) == 0) {				user = 1;				continue;			}		}		if (!pass) {			if (regexec(pass_regex, p, 0, NULL, 0) == 0)				pass = 1;		}		if (user && pass) break;	}	free(tmp);		return (user && pass);}static char *http_req_dirname(char *req){	char *uri, *vers;		if ((uri = strchr(req, ' ')) == NULL)		return (req);		if ((vers = strrchr(uri, ' ')) == uri) {		vers = NULL;	}	else if (vers[-1] == '/') {		return (req);	}	else *vers++ = '\0';		strcpy(req, dirname(req));	strcat(req, "/");		if (vers) {		strcat(req, " ");		strcat(req, vers);	}	return (req);}  intdecode_http(u_char *buf, int len, u_char *obuf, int olen){	struct buf *msg, inbuf, outbuf;	char *p, *req, *auth, *pauth, *query, *host;	int i;	buf_init(&inbuf, buf, len);	buf_init(&outbuf, obuf, olen);	if (user_regex == NULL || pass_regex == NULL) {		if ((user_regex = malloc(sizeof(*user_regex))) == NULL ||		    (pass_regex = malloc(sizeof(*pass_regex))) == NULL)			err(1, "malloc");				if (regcomp(user_regex, USER_REGEX, REGEX_FLAGS) ||		    regcomp(pass_regex, PASS_REGEX, REGEX_FLAGS))			errx(1, "regcomp failed");	}	while ((i = buf_index(&inbuf, "\r\n\r\n", 4)) >= 0) {		msg = buf_tok(&inbuf, NULL, i);		msg->base[msg->end] = '\0';		buf_skip(&inbuf, 4);		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;		auth = pauth = query = host = NULL;		if ((query = strchr(req, '?')) != NULL)			query++;				while ((p = strtok(NULL, "\r\n")) != NULL) {			if (strncasecmp(p, "Authorization: Basic ", 21) == 0) {				auth = p;			}							else if (strncasecmp(p, "Proxy-authorization: "					     "Basic ", 27) == 0) {				pauth = p;			}			else if (strncasecmp(p, "Host: ", 6) == 0) {				host = p;			}			else if (req[0] == 'P') {				if (strncmp(p, "Content-type: ", 14) == 0) {					if (strncmp(p + 14, "application/"						    "x-www-form-urlencoded",						    33) != 0) {						query = NULL;					}				}				else if (strncmp(p, "Content-length: ", 16) == 0) {					p += 16;					i = atoi(p);					if ((msg = buf_tok(&inbuf, NULL, i)) == NULL)						continue;					msg->base[msg->end] = '\0';					query = buf_ptr(msg);				}			}		}		if (auth || pauth || (query && grep_query_auth(query))) {			if (buf_tell(&outbuf) > 0)				buf_putf(&outbuf, "\n");						if (req[0] == 'G' && auth)				req = http_req_dirname(req);			buf_putf(&outbuf, "%s\n", req);						if (host)				buf_putf(&outbuf, "%s\n", host);						if (pauth) {				buf_putf(&outbuf, "%s", pauth);				p = pauth + 27;				i = base64_pton(p, p, strlen(p));				p[i] = '\0';				buf_putf(&outbuf, " [%s]\n", p);			}			if (auth) {				buf_putf(&outbuf, "%s", auth);				p = auth + 21;				i = base64_pton(p, p, strlen(p));				p[i] = '\0';				buf_putf(&outbuf, " [%s]\n", p);			}			else if (req[0] == 'P' && query) {				buf_putf(&outbuf,					 "Content-type: application/"					 "x-www-form-urlencoded\n"					 "Content-length: %d\n%s\n",					 strlen(query), query);			}		}	}	buf_end(&outbuf);		return (buf_len(&outbuf));}

⌨️ 快捷键说明

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