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

📄 util.c

📁 linux或unix下回话劫持工具
💻 C
字号:
/* * *	This is free software. You can redistribute it and/or modify under *	the terms of the GNU General Public License version 2. * * 	Copyright (C) 1998 by kra * */#include "hunt.h"#include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <unistd.h>#include <string.h>#include <netdb.h>#if 0static char *__tty_color[] = {		"\033[0;40;30m",		 /* 0	black on black */		"\033[0;40;31m",		 /* 1	red */		"\033[0;40;32m",		 /* 2	green */		"\033[0;40;33m",		 /* 3	brown */		"\033[0;40;34m",		 /* 4	blue */		"\033[0;40;35m",		 /* 5	magenta */		"\033[0;40;36m",		 /* 6	cyan */		"\033[0;40;37m",		 /* 7	light gray */		"\033[1;40;30m",		 /* 0	gray */		"\033[1;40;31m",		 /* 1	brightred */		"\033[1;40;32m",		 /* 2	brightgreen */		"\033[1;40;33m",		 /* 3	yellow */		"\033[1;40;34m",		 /* 4	brightblue */		"\033[1;40;35m",		 /* 5	brighmagenta */		"\033[1;40;36m",		 /* 6	brightcyan */		"\033[1;40;37m",		 /* 7	white */};#endifvoid print_colors(){	int i;		for (i = 0; i < 16; i++) {		set_tty_color(i);		printf("%d Hi\n", i);	}}void set_tty_color(enum TTY_COLOR color){	set_tty_color_bg(color, COLOR_BLACK);}void set_tty_color_bg(enum TTY_COLOR fg, enum TTY_COLOR bg){	char buf[32];		sprintf(buf, "\033[%d;4%d;3%dm", fg / 8, bg % 8, fg % 8);	fputs(buf, stdout);}int is_power2(unsigned int i){	while (!(i & 1))		i >>= 1;        i >>= 1;	return i ? 0 : 1;}int log2(unsigned int i){	int l = 0;	if (!i)		return -1;	while (!(i & 1)) {		l++;		i >>= 1;	}	i >>= 1;	if (i)		return 0;	else		return l;}int count_mask(unsigned int mask){	int retval;		retval = 0;	while (mask) {		if (mask & 1)			retval++;		mask >>= 1;	}	return retval;}void print_data_packet(struct packet *p, int data_len, int count, int dst_packet){	static unsigned int hsrc_seq_done;	static unsigned int hdst_seq_done;	int data_start;	int i;		data_start = 0;#if 0	if (count == 1) {		if (dst_packet)			hdst_seq_done = ntohl(p->p_hdr.p_tcph->seq) + data_len;		else			hsrc_seq_done = ntohl(p->p_hdr.p_tcph->seq) + data_len;	}#endif	if (count > 1) {		if (dst_packet)			data_start = hdst_seq_done - ntohl(p->p_hdr.p_tcph->seq);		else			data_start = hsrc_seq_done - ntohl(p->p_hdr.p_tcph->seq);		if (data_start < 0)			data_start = 0;	}	if (!dst_packet)	    	set_tty_color(COLOR_GREEN);	for (i = data_start; i < data_len; i++) {		if (p->p_data[i] == '\r' && i + 1 < data_len && 		    p->p_data[i + 1] != '\n')			putchar('\n');		else			putchar(p->p_data[i]);	}	if (!dst_packet)	    	set_tty_color(COLOR_LIGHTGRAY);	fflush(stdout);		if (count && data_start <= data_len) {		if (dst_packet)			hdst_seq_done = ntohl(p->p_hdr.p_tcph->seq) + data_len;		else			hsrc_seq_done = ntohl(p->p_hdr.p_tcph->seq) + data_len;	}}void print_data(char *label, void *data, int len){	int i;	printf("%s: ", label);	for (i = 0; i < len; i++) {		printf("%X ", ((unsigned char *)data)[i]);	}	printf("\n");}unsigned short ip_in_cksum(struct iphdr *iph, unsigned short *ptr, int nbytes){	register long sum = 0;	/* assumes long == 32 bits */	u_short oddbyte;	register u_short answer;	/* assumes u_short == 16 bits */	int pheader_len;	unsigned short *pheader_ptr;		struct pseudo_header {		unsigned long saddr;		unsigned long daddr;		unsigned char null;		unsigned char proto;		unsigned short tlen;	} pheader;		pheader.saddr = iph->saddr;	pheader.daddr = iph->daddr;	pheader.null = 0;	pheader.proto = iph->protocol;	pheader.tlen = htons(nbytes);	pheader_ptr = (unsigned short *)&pheader;	for (pheader_len = sizeof(pheader); pheader_len; pheader_len -= 2) {		sum += *pheader_ptr++;	}	while (nbytes > 1) {		sum += *ptr++;		nbytes -= 2;	}	if (nbytes == 1) {	/* mop up an odd byte, if necessary */		oddbyte = 0;	/* make sure top half is zero */		*((u_char *) & oddbyte) = *(u_char *) ptr;	/* one byte only */		sum += oddbyte;	}	sum += (sum >> 16);	/* add carry */	answer = ~sum;		/* ones-complement, then truncate to 16 bits */	return (answer);}unsigned short in_cksum(unsigned short *ptr, int nbytes){	register long sum=0;        /* assumes long == 32 bits */	u_short oddbyte;	register u_short answer;    /* assumes u_short == 16 bits */        	while(nbytes>1){        	sum+=*ptr++;	        nbytes-=2;    	}	if(nbytes==1){              /* mop up an odd byte, if necessary */        	oddbyte=0;              /* make sure top half is zero */	        *((u_char *)&oddbyte)=*(u_char *)ptr;   /* one byte only */        	sum+=oddbyte;	}               	sum+=(sum>>16);             /* add carry */	answer=~sum;                /* ones-complement, then truncate to 16 bits */	return(answer);}int sprintf_eth_mac(char *b, unsigned char *mac){	return sprintf(b, "%02X:%02X:%02X:%02X:%02X:%02X", 		       mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);}int print_eth_mac(unsigned char *mac){	char buf[64];		sprintf_eth_mac(buf, mac);	return printf("%s", buf);}int rawsock(void){	int fd,val=1;    	if ((fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {	        if(verbose)			perror("\n(rawsock) Socket problems [fatal]");		exit(1);	}  #ifdef IP_HDRINCL	if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &val, sizeof(val)) < 0) {  		if (verbose) {        		perror("Cannot set IP_HDRINCL socket option");			fprintf(stderr,"\nIf you are relying on this rather then a hacked kernel to spoof packets, your sunk.\n[cr]");			getchar();		}	}#endif	return fd;}	#if 0static unsigned const ethernet_polynomial_le = 0xedb88320U;static inline unsigned int ether_crc_le(int length, unsigned char *data){	unsigned int crc = 0xffffffff;	/* Initial value. */	while(--length >= 0) {		unsigned char current_octet = *data++;		int bit;		for (bit = 8; --bit >= 0; current_octet >>= 1) {			if ((crc ^ current_octet) & 1) {				crc >>= 1;				crc ^= ethernet_polynomial_le;			} else				crc >>= 1;		}	}	return crc;}#endifint sprintf_db_ports(unsigned int *ports, char *buf, int buf_size, int all){	char *buf_orig;	int i;		buf_orig = buf;	if (ports[0] == 0) {		if (all)			buf += sprintf(buf, "all");		return buf - buf_orig;	}	for (i = 0; ports[i]; i++) {		if (PORT_INTERVAL(ports[i])) {/*			buf += sprintf(buf, "%d:%d ", ntohs(PORT_VAL(ports[i])), ntohs(ports[i+1]));*/			buf += sprintf(buf, "%s:%s ", 				       port_lookup(PORT_VAL(ports[i]), hl_mode),				       port_lookup(ports[i+1], hl_mode));			++i;		} else/*			buf += sprintf(buf, "%d ", ntohs(ports[i]));*/			buf += sprintf(buf, "%s ", port_lookup(ports[i], hl_mode));	}	*(buf - 1) = 0;	return buf - buf_orig;}int port_match(int port, unsigned int *db_ports){	int start, end;	int pass;	int i;		if (!db_ports[0])		return 1;	pass = 0;	for (i = 0; db_ports[i]; i++) {		if (PORT_INTERVAL(db_ports[i])) {			start = ntohs(PORT_VAL(db_ports[i]));			end = ntohs(db_ports[++i]);			if (start <= ntohs(port) && ntohs(port) <= end) {				pass = 1;				break;			}		} else if (port == db_ports[i]) {			pass = 1;			break;		}	}	if (pass)		return 1;	else		return 0;}void port_htons(unsigned int *db_ports){	int i;	unsigned int upper;		for (i = 0; db_ports[i]; i++) {		upper = db_ports[i] & (~PORT_MASK);		db_ports[i] = upper | htons(PORT_VAL(db_ports[i]));	}}unsigned char *suggest_mac(void){	static unsigned char mac[ETH_ALEN] = {0xEA, 0x1A, 0xDE, 0xAD, 0xBE, 0x00};	int i;		for (i = ETH_ALEN - 1; i >= 0; i++) {		if (++mac[i] != 0)			break;		++mac[i]; /* don't leave it 00 */	}	return mac;}void ctrl_c_prompt(void){	set_tty_color(COLOR_BRIGHTRED);	printf("CTRL-C to break\n");	set_tty_color(COLOR_LIGHTGRAY);	fflush(stdout);}

⌨️ 快捷键说明

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