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

📄 rpc.c

📁 一个网络工具包,可以嗅探email和http等数据包中的密码等信息.注意要先把libnet-1.0.2a.tar.gz和 libnids-1.16.tar.gz装上,不然会因为缺少库函数而无法编译和安
💻 C
字号:
/*  rpc.c  Copyright (c) 2000 Dug Song <dugsong@monkey.org>    $Id: rpc.c,v 1.7 2000/12/15 20:13:29 dugsong Exp $*/#include "config.h"#include <sys/types.h>#include <rpc/rpc.h>#include <stdio.h>#include <string.h>#include "decode.h"#include "rpc.h"#define XIDMAPSIZE	64static struct xid_map	xid_maps[XIDMAPSIZE];static int		xid_map_next = 0;static int		xid_map_hint = 0;/* xid_map adapted from tcpdump's print-nfs.c */voidxid_map_enter(u_int32_t xid, u_int32_t prog, u_int32_t vers,	      u_int32_t proc, void *data){	struct xid_map *mp;		mp = &xid_maps[xid_map_next];		if (++xid_map_next >= XIDMAPSIZE)		xid_map_next = 0;		mp->xid = xid;	mp->prog = prog;	mp->vers = vers;	mp->proc = proc;	mp->data = data;}struct xid_map *xid_map_find(int xid){	struct xid_map *mp;	int i;		/* Start searching from where we last left off. */	i = xid_map_hint;	do {		mp = &xid_maps[i];		if (mp->xid == xid) {			/* match */			xid_map_hint = i;			return (mp);		}		if (++i >= XIDMAPSIZE)			i = 0;	} while (i != xid_map_hint);		return (NULL);}intrpc_decode(u_char *buf, int len, struct rpc_msg *msg){	XDR xdrs;	u_int32_t fraghdr;	u_char *p, *tmp;	int stat, tmplen;	if (len < 20)		return (0);		p = buf + 4;	/* If not recognizably RPC, try TCP record defragmentation */	if (pntohl(p) != CALL && pntohl(p) != REPLY) {		tmp = buf;		tmplen = 0;				for (;;) {			fraghdr = pntohl(tmp);						if (FRAGLEN(fraghdr) + 4 > len)				return (0);						len -= 4;			memmove(tmp, tmp + 4, len);			tmplen += FRAGLEN(fraghdr);						if (LASTFRAG(fraghdr))				break;						tmp += FRAGLEN(fraghdr);			len -= FRAGLEN(fraghdr);						if (len < 4)				return (0);		}		len = tmplen;	}	/* Decode RPC message. */	memset(msg, 0, sizeof(*msg));		if (ntohl(((struct rpc_msg *)buf)->rm_direction) == CALL) {		xdrmem_create(&xdrs, buf, len, XDR_DECODE);				if (!xdr_callmsg(&xdrs, msg)) {			xdr_destroy(&xdrs);			return (0);		}	}	else if (ntohl(((struct rpc_msg *)buf)->rm_direction) == REPLY) {		msg->acpted_rply.ar_results.proc = (xdrproc_t) xdr_void;		xdrmem_create(&xdrs, buf, len, XDR_DECODE);				if (!xdr_replymsg(&xdrs, msg)) {			xdr_destroy(&xdrs);			return (0);		}	}	stat = xdr_getpos(&xdrs);	xdr_destroy(&xdrs);		return (stat);}

⌨️ 快捷键说明

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