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

📄 ipfilter.c

📁 一个很好用的linux 下的流量监控软件
💻 C
📖 第 1 页 / 共 2 页
字号:
/***ipfilter.c - user interface and filter function for all IP packetsWritten by Gerard Paul JavaCopyright (c) Gerard Paul Java 2001, 2002This software is open-source; you may 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 <string.h>#include <ctype.h>#include <time.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#include <unistd.h>#include <input.h>#include <menurt.h>#include <msgboxes.h>#include <labels.h>#include "addproto.h"#include "dirs.h"#include "deskman.h"#include "attrs.h"#include "fltdefs.h"#include "fltmgr.h"#include "ipfilter.h"#include "fltedit.h"#include "getpath.h"#include "parseproto.h"#include "cidr.h"extern int daemonized;void gethostparams(struct hostparams *data, char *init_saddr,                   char *init_smask, char *init_sport1, char *init_sport2,                   char *init_daddr, char *init_dmask, char *init_dport1,                   char *init_dport2, char *initinex, char *initmatchop,                   int *aborted){    WINDOW *dlgwin;    PANEL *dlgpanel;    struct FIELDLIST fields;    struct FIELD *fieldptr;    int rangeproto1, rangeproto2;    int parse_result;    char *bptr, *cptr;    int i, doagain;    char msgstr[60];    char actual_address[30];    unsigned int maskbits;    const char *init_yesno = "Y";    const char *WILDCARD = "0.0.0.0";    dlgwin = newwin(22, 80, (LINES - 22) / 2, (COLS - 80) / 2);    dlgpanel = new_panel(dlgwin);    wattrset(dlgwin, DLGBOXATTR);    tx_colorwin(dlgwin);    tx_box(dlgwin, ACS_VLINE, ACS_HLINE);    mvwprintw(dlgwin, 0, 22, " Source ");    mvwprintw(dlgwin, 0, 52, " Destination ");    wmove(dlgwin, 20, 2);    tabkeyhelp(dlgwin);    stdkeyhelp(dlgwin);    wattrset(dlgwin, DLGTEXTATTR);    mvwprintw(dlgwin, 2, 2, "IP address");    mvwprintw(dlgwin, 4, 2, "Wildcard mask");    mvwprintw(dlgwin, 6, 2, "Port");    mvwprintw(dlgwin, 9, 2, "Protocols to match");    mvwprintw(dlgwin, 10, 2, "(Enter Y beside each");    mvwprintw(dlgwin, 11, 2, "protocol to match.)");    mvwprintw(dlgwin, 18, 2, "Include/Exclude (I/E)");    tx_initfields(&fields, 19, 55, (LINES - 22) / 2 + 1,                  (COLS - 80) / 2 + 23, DLGTEXTATTR, FIELDATTR);    mvwprintw(fields.fieldwin, 5, 6, "to");    mvwprintw(fields.fieldwin, 5, 36, "to");    mvwprintw(fields.fieldwin, 6, 0,              "Port fields apply only to TCP and UDP packets");    mvwprintw(fields.fieldwin, 8, 3, "All IP");    mvwprintw(fields.fieldwin, 8, 16, "TCP");    mvwprintw(fields.fieldwin, 8, 26, "UDP");    mvwprintw(fields.fieldwin, 8, 35, "ICMP");    mvwprintw(fields.fieldwin, 8, 45, "IGMP");    mvwprintw(fields.fieldwin, 10, 5, "OSPF");    mvwprintw(fields.fieldwin, 10, 16, "IGP");    mvwprintw(fields.fieldwin, 10, 25, "IGRP");    mvwprintw(fields.fieldwin, 10, 36, "GRE");    mvwprintw(fields.fieldwin, 10, 45, "L2TP");    mvwprintw(fields.fieldwin, 12, 1, "IPSec AH");    mvwprintw(fields.fieldwin, 12, 13, "IPSec ESP");    mvwprintw(fields.fieldwin, 14, 1,              "Additional protocols or ranges (e.g. 8, 18-20, 69, 90)");    mvwprintw(fields.fieldwin, 17, 11, "Match opposite (Y/N)");    tx_addfield(&fields, 25, 1, 0, init_saddr);    tx_addfield(&fields, 25, 3, 0, init_smask);    tx_addfield(&fields, 5, 5, 0, init_sport1);    tx_addfield(&fields, 5, 5, 9, init_sport2);    tx_addfield(&fields, 25, 1, 30, init_daddr);    tx_addfield(&fields, 25, 3, 30, init_dmask);    tx_addfield(&fields, 5, 5, 30, init_dport1);    tx_addfield(&fields, 5, 5, 39, init_dport2);    if (data->filters[F_ALL_IP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 8, 10, init_yesno);    if (data->filters[F_TCP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 8, 20, init_yesno);    if (data->filters[F_UDP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 8, 30, init_yesno);    if (data->filters[F_ICMP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 8, 40, init_yesno);    if (data->filters[F_IGMP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 8, 50, init_yesno);    if (data->filters[F_OSPF])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 10, 10, init_yesno);    if (data->filters[F_IGP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 10, 20, init_yesno);    if (data->filters[F_IGRP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 10, 30, init_yesno);    if (data->filters[F_GRE])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 10, 40, init_yesno);    if (data->filters[F_L2TP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 10, 50, init_yesno);    if (data->filters[F_IPSEC_AH])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 12, 10, init_yesno);    if (data->filters[F_IPSEC_ESP])        init_yesno = "Y";    else        init_yesno = "";    tx_addfield(&fields, 1, 12, 23, init_yesno);    cptr = tx_ltrim(data->protolist);    tx_addfield(&fields, 54, 15, 1, cptr);    tx_addfield(&fields, 1, 17, 1, initinex);    tx_addfield(&fields, 1, 17, 32, initmatchop);    do {        tx_fillfields(&fields, aborted);        /*get input */        if (!(*aborted)) {            fieldptr = fields.list;            /*             * Adjust upper loop bound depending on the number of fields             * before the "Additional IP protocols" field.             */            for (i = 2; i <= 21; i++)                fieldptr = fieldptr->nextfield;            if (!validate_ranges(fieldptr->buf, &parse_result, &bptr)) {                snprintf(msgstr, 60,                         "Invalid protocol input at or near token \"%s\"",                         bptr);                tx_errbox(msgstr, ANYKEY_MSG, &i);                doagain = 1;            } else                doagain = 0;        } else {            doagain = 0;        }    } while (doagain);    /*     * Store entered filter data into data structures     */    if (!(*aborted)) {        fieldptr = fields.list;        maskbits = 0;        /*         * Process Source Address field         */        if (fieldptr->buf[0] == '\0')            strcpy(data->s_fqdn, WILDCARD);        else            strcpy(data->s_fqdn, fieldptr->buf);        if (strchr(data->s_fqdn, '/') != NULL) {            cidr_split_address(data->s_fqdn, actual_address, &maskbits);            strcpy(data->s_fqdn, actual_address);        }        /*         * Process Source Mask field         */        fieldptr = fieldptr->nextfield;        if (fieldptr->buf[0] == '\0') {            if (maskbits > 32) {                strcpy(data->s_mask, WILDCARD);            } else {                strncpy(data->s_mask, cidr_get_quad_mask(maskbits), 20);            }        } else            strcpy(data->s_mask, fieldptr->buf);        /*

⌨️ 快捷键说明

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