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

📄 fltselect.c

📁 一个很好用的linux 下的流量监控软件
💻 C
字号:
/*** fltselect.c - a menu-based module that allows selection of	other protocols to displayWritten 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 <unistd.h>#include <fcntl.h>#include <string.h>#include <sys/stat.h>#include <netinet/udp.h>#include <netinet/in.h>#include <linux/if_ether.h>#include <winops.h>#include <menurt.h>#include <msgboxes.h>#include "addproto.h"#include "dirs.h"#include "fltdefs.h"#include "fltselect.h"#include "fltedit.h"#include "fltmgr.h"#include "deskman.h"#include "attrs.h"#include "instances.h"void makemainfiltermenu(struct MENU *menu){    tx_initmenu(menu, 8, 18, (LINES - 8) / 2, (COLS - 31) / 2,                BOXATTR, STDATTR, HIGHATTR, BARSTDATTR, BARHIGHATTR,                DESCATTR);    tx_additem(menu, " ^I^P...", "Manages IP packet filters");    tx_additem(menu, " ^A^RP",               "Toggles Address Resolution Protocol filter");    tx_additem(menu, " ^R^ARP", "Toggles Reverse ARP filter");    tx_additem(menu, " ^N^on-IP",               "Toggles filter for all other non-IP packets");    tx_additem(menu, NULL, NULL);    tx_additem(menu, " E^x^it menu",               "Returns to the filter management menu");}void setfilters(struct filterstate *filter, unsigned int row){    int aborted;    switch (row) {    case 1:        ipfilterselect(&(filter->fl), filter->filename,                       &(filter->filtercode), &aborted);        break;    case 2:        filter->arp = ~(filter->arp);        break;    case 3:        filter->rarp = ~(filter->rarp);        break;    case 4:        filter->nonip = ~(filter->nonip);        break;    }}void toggleprotodisplay(WINDOW * win, struct filterstate *filter,                        unsigned int row){    wmove(win, row, 2);    switch (row) {    case 1:        if (filter->filtercode == 0)            wprintw(win, "No IP filter active");        else            wprintw(win, "IP filter active   ");        break;    case 2:        if (filter->arp)            wprintw(win, "ARP visible    ");        else            wprintw(win, "ARP not visible");        break;    case 3:        if (filter->rarp)            wprintw(win, "RARP visible    ");        else            wprintw(win, "RARP not visible");        break;    case 4:        if (filter->nonip)            wprintw(win, "Non-IP visible    ");        else            wprintw(win, "Non-IP not visible");        break;    }}/* * Filter for non-IP packets */int nonipfilter(struct filterstate *filter, unsigned int protocol){    int result = 0;    switch (protocol) {    case ETH_P_ARP:        result = filter->arp;        break;    case ETH_P_RARP:        result = filter->rarp;        break;    case 0:        result = filter->nonip;        break;    }    return result;}void config_filters(struct filterstate *filter){    struct MENU menu;    WINDOW *statwin;    PANEL *statpanel;    int row;    int aborted;    statwin = newwin(6, 30, (LINES - 8) / 2, (COLS - 15) / 2 + 10);    statpanel = new_panel(statwin);    wattrset(statwin, BOXATTR);    tx_colorwin(statwin);    tx_box(statwin, ACS_VLINE, ACS_HLINE);    tx_stdwinset(statwin);    wmove(statwin, 0, 1);    wprintw(statwin, " Filter Status ");    wattrset(statwin, STDATTR);    for (row = 1; row <= 4; row++)        toggleprotodisplay(statwin, filter, row);    makemainfiltermenu(&menu);    row = 1;    do {        tx_showmenu(&menu);        tx_operatemenu(&menu, &row, &aborted);        setfilters(filter, row);        toggleprotodisplay(statwin, filter, row);    } while (row != 6);    tx_destroymenu(&menu);    del_panel(statpanel);    delwin(statwin);    update_panels();    doupdate();}void setodefaults(struct filterstate *filter){    memset(filter, 0, sizeof(struct filterstate));    filter->filtercode = 0;}void loadfilters(struct filterstate *filter){    int pfd;    int br;    pfd = open(FLTSTATEFILE, O_RDONLY); /* open filter state file */    if (pfd < 0) {        setodefaults(filter);        return;    }    br = read(pfd, filter, sizeof(struct filterstate));    if (br < 0)        setodefaults(filter);    close(pfd);    /*     * Reload IP filter if one was previously applied     */    if (filter->filtercode != 0)        loadfilter(filter->filename, &(filter->fl), FLT_RESOLVE);}void savefilters(struct filterstate *filter){    int pfd;    int bw;    int resp;    if (!facility_active(FLTIDFILE, ""))        mark_facility(FLTIDFILE, "Filter configuration change", "");    else {        tx_errbox("Filter state file currently in use; try again later",                  ANYKEY_MSG, &resp);        return;    }    pfd =        open(FLTSTATEFILE, O_CREAT | O_TRUNC | O_WRONLY,             S_IRUSR | S_IWUSR);    bw = write(pfd, filter, sizeof(struct filterstate));    if (bw < 1)        tx_errbox("Unable to write filter state information", ANYKEY_MSG,                  &resp);    close(pfd);    unmark_facility(FLTIDFILE, "");}

⌨️ 快捷键说明

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