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

📄 options.c

📁 一个网络流量分析的完整的程序
💻 C
字号:
/***options.c - implements the configuration section of the utilityWritten by Gerard Paul JavaCopyright (c) Gerard Paul Java 1997, 1998This software is open source; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.This program is distributed WITHOUT ANY WARRANTY; without even theimplied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License in the included COPYING file fordetails.***/#include <curses.h>#include <panel.h>#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <winops.h>#include <menurt.h>#include <input.h>#include <msgboxes.h>#include "links.h"#include "serv.h"#include "options.h"#include "deskman.h"#include "attrs.h"#include "landesc.h"#include "promisc.h"#include "dirs.h"#include "instances.h"#define ALLOW_ZERO 1#define DONT_ALLOW_ZERO 0void makeoptionmenu(struct MENU *menu){    tx_initmenu(menu, 19, 40, (LINES - 19) / 2 - 1, (COLS - 40) / 16,        BOXATTR, STDATTR, HIGHATTR, BARSTDATTR, BARHIGHATTR, DESCATTR);    tx_additem(menu, " ^R^everse DNS lookups",	    "Toggles resolution of IP addresses into host names");    tx_additem(menu, " TCP/UDP ^s^ervice names",	    "Displays TCP/UDP service names instead of numeric ports");    tx_additem(menu, " Force ^p^romiscuous mode",	    "Toggles capture of all packets by LAN interfaces");    tx_additem(menu, " ^C^olor",	    "Turns color on or off (restart IPTraf to effect change)");    tx_additem(menu, " ^L^ogging",	    "Toggles logging of traffic to a data file");    tx_additem(menu, " Acti^v^ity mode",	    "Toggles activity indicators between kbits/s and kbytes/s");    tx_additem(menu, " Source ^M^AC addrs in traffic monitor",            "Toggles display of source MAC addresses in the IP Traffic Monitor");    tx_additem(menu, NULL, NULL);    tx_additem(menu, " ^T^imers...", "Configures timeouts and intervals");    tx_additem(menu, NULL, NULL);    tx_additem(menu, " ^A^dditional ports...",	    "Allows you to add port numbers higher than 1023 for the service stats");    tx_additem(menu, " ^D^elete port/range...",	    "Deletes a port or range of ports earlier added");    tx_additem(menu, NULL, NULL);    tx_additem(menu, " ^E^thernet/PLIP host descriptions...",	    "Manages descriptions for Ethernet and PLIP addresses");    tx_additem(menu, " ^F^DDI/Token Ring host descriptions...",	    "Manages descriptions for FDDI and FDDI addresses");    tx_additem(menu, NULL, NULL);    tx_additem(menu, " E^x^it configuration", "Returns to main menu");}void maketimermenu(struct MENU *menu){    tx_initmenu(menu, 7, 35, (LINES - 19) / 2 + 7, (COLS - 35) / 2,        BOXATTR, STDATTR, HIGHATTR, BARSTDATTR, BARHIGHATTR, DESCATTR);    tx_additem(menu, " TCP ^t^imeout...",	    "Sets the length of time before inactive TCP entries are considered idle");    tx_additem(menu, " ^L^ogging interval...",	    "Sets the time between loggings for interface, host, and service stats");    tx_additem(menu, " ^S^creen update interval...",	    "Sets the screen update interval in seconds (set to 0 for fastest updates)");    tx_additem(menu, " TCP closed/idle ^p^ersistence...",	    "Determines how long closed/idle/reset entries stay onscreen");    tx_additem(menu, " E^x^it menu", "Returns to the configuration menu");}void printoptonoff(unsigned int option, WINDOW * win){    if (option)	wprintw(win, " On");    else	wprintw(win, "Off");}void indicatesetting(int row, struct OPTIONS *options, WINDOW * win){    wmove(win, row, 30);    wattrset(win, HIGHATTR);    switch (row) {    case 1:	printoptonoff(options->revlook, win);	break;    case 2:	printoptonoff(options->servnames, win);	break;    case 3:	printoptonoff(options->promisc, win);	break;    case 4:	printoptonoff(options->color, win);	break;    case 5:	printoptonoff(options->logging, win);	break;    case 6:	wmove(win, row, 25);	if (options->actmode == KBITS)	    wprintw(win, " kbits/s");	else	    wprintw(win, "kbytes/s");        break;    case 7:        printoptonoff(options->mac, win);        break;    }   }void saveoptions(struct OPTIONS *options){    int fd;    int bw;    int response;    fd = open(CONFIGFILE, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR);    if (fd < 0) {	tx_errbox("Cannot create config file", ANYKEY_MSG, &response);	return;    }    bw = write(fd, options, sizeof(struct OPTIONS));    if (bw < 0)	tx_errbox("Unable to write config file", ANYKEY_MSG, &response);    close(fd);}void setdefaultopts(struct OPTIONS *options){    options->revlook = 0;    options->promisc = 0;    options->servnames = 0;    options->color = 1;    options->logging = 0;    options->actmode = KBITS;    options->mac = 0;    options->timeout = 15;    options->logspan = 3600;    options->updrate = 0;    options->closedint = 0;}void loadoptions(struct OPTIONS *options){    int fd;    int br;    setdefaultopts(options);    fd = open(CONFIGFILE, O_RDONLY);    if (fd < 0)	return;    br = read(fd, options, sizeof(struct OPTIONS));    close(fd);}void updatetimes(struct OPTIONS *options, WINDOW * win){    wattrset(win, HIGHATTR);    mvwprintw(win, 9, 25, "%3u mins", options->timeout);    mvwprintw(win, 10, 25, "%3u mins", options->logspan / 60);    mvwprintw(win, 11, 25, "%3u secs", options->updrate);    mvwprintw(win, 12, 25, "%3u mins", options->closedint);}void showoptions(struct OPTIONS *options, WINDOW * win){    int i;    for (i = 1; i <= 7; i++)	indicatesetting(i, options, win);    updatetimes(options, win);}void settimeout(unsigned int *value, const char *units, int allow_zero,		int *aborted){    WINDOW *dlgwin;    PANEL *dlgpanel;    struct FIELDLIST field;    int resp;    unsigned int tmval = 0;    dlgwin = newwin(7, 40, (LINES - 7) / 2, (COLS - 40) / 4);    dlgpanel = new_panel(dlgwin);    wattrset(dlgwin, DLGBOXATTR);    tx_colorwin(dlgwin);    box(dlgwin, ACS_VLINE, ACS_HLINE);    wattrset(dlgwin, DLGTEXTATTR);    wmove(dlgwin, 2, 2);    wprintw(dlgwin, "Enter value in %s", units);    wmove(dlgwin, 5, 2);    stdkeyhelp(dlgwin);    tx_initfields(&field, 1, 10, (LINES - 7) / 2 + 3, (COLS - 40) / 4 + 2,        DLGTEXTATTR, FIELDATTR);    tx_addfield(&field, 3, 0, 0, "");    do {	tx_fillfields(&field, aborted);	if (!(*aborted)) {	    tmval = atoi(field.list->buf);	    if ((!allow_zero) && (tmval == 0))		tx_errbox("Invalid timeout value", ANYKEY_MSG, &resp);	}    } while (((!allow_zero) && (tmval == 0)) && (!(*aborted)));    if (!(*aborted))	*value = tmval;    del_panel(dlgpanel);    delwin(dlgwin);    tx_destroyfields(&field);    update_panels();    doupdate();}void setoptions(struct OPTIONS *options, struct porttab **ports){    int row = 1;    int trow = 1;        /* row for timer submenu */    int aborted;    int resp;    struct MENU menu;    struct MENU timermenu;        WINDOW *statwin;    PANEL *statpanel;    if (!is_first_instance) {	tx_errbox("Only the first instance of IPTraf can configure",	       ANYKEY_MSG, &resp);	return;    }    makeoptionmenu(&menu);        statwin = newwin(14, 35, (LINES - 19) / 2 - 1, (COLS - 40) / 16 + 40);    statpanel = new_panel(statwin);    wattrset(statwin, BOXATTR);    tx_colorwin(statwin);    box(statwin, ACS_VLINE, ACS_HLINE);    wmove(statwin, 8, 1);    whline(statwin, ACS_HLINE, 33);    mvwprintw(statwin, 0, 1, " Current Settings ");    wattrset(statwin, STDATTR);    mvwprintw(statwin, 1, 2, "Reverse DNS lookups:");    mvwprintw(statwin, 2, 2, "Service names:");    mvwprintw(statwin, 3, 2, "Promiscuous:");    mvwprintw(statwin, 4, 2, "Color:");    mvwprintw(statwin, 5, 2, "Logging:");    mvwprintw(statwin, 6, 2, "Activity mode:");    mvwprintw(statwin, 7, 2, "MAC addresses:");    mvwprintw(statwin, 9, 2, "TCP timeout:");    mvwprintw(statwin, 10, 2, "Log interval:");    mvwprintw(statwin, 11, 2, "Update interval:");    mvwprintw(statwin, 12, 2, "Closed/idle persist:");    showoptions(options, statwin);    do {	tx_showmenu(&menu);	tx_operatemenu(&menu, &row, &aborted);	switch (row) {	case 1:	    options->revlook = ~(options->revlook);	    break;	case 2:	    options->servnames = ~(options->servnames);	    break;	case 3:	    options->promisc = ~(options->promisc);	    break;	case 4:	    options->color = ~(options->color);	    break;	case 5:	    options->logging = ~(options->logging);	    break;	case 6:	    options->actmode = ~(options->actmode);	    break;	case 7:	    options->mac = ~(options->mac);	    break;	case 9:            maketimermenu(&timermenu);	    do {	        tx_showmenu(&timermenu);	        tx_operatemenu(&timermenu, &trow, &aborted);	        	        switch(trow) {	        case 1:	            settimeout(&(options->timeout), "minutes", DONT_ALLOW_ZERO,		           &aborted);	            if (!aborted)		        updatetimes(options, statwin);	            break;		case 2:	            settimeout((unsigned int *) &(options->logspan), "minutes",		               DONT_ALLOW_ZERO, &aborted);	            if (!aborted) {		        options->logspan = options->logspan * 60;		        updatetimes(options, statwin);	            }	            break;	        case 3:	            settimeout(&options->updrate, "seconds", ALLOW_ZERO, &aborted);	            if (!aborted)		        updatetimes(options, statwin);	            break;	        case 4:	            settimeout(&options->closedint, "minutes", ALLOW_ZERO,		               &aborted);	            if (!aborted)		        updatetimes(options, statwin);	            break;	        }	    } while (trow != 5);	    	    tx_destroymenu(&timermenu);	    update_panels();	    doupdate();	    break;	case 11:	    addmoreports(ports);	    break;	case 12:	    removeaport(ports);	    break;	case 14:	    ethdescmgr(LINK_ETHERNET);	    break;	case 15:	    ethdescmgr(LINK_FDDI);	    break;	}	indicatesetting(row, options, statwin);    } while (row != 17);    tx_destroymenu(&menu);    del_panel(statpanel);    delwin(statwin);    update_panels();    doupdate();}

⌨️ 快捷键说明

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