亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? l7-filter.cpp

?? linux下的l7源代碼
?? CPP
字號:
/*  Functions and classes which track the conntracks for l7-filter.    By Ethan Sommer <sommere@users.sf.net> and Matthew Strait   <quadong@users.sf.net>, (C) 2006-2007  http://l7-filter.sf.net   This program is free software; you can redistribute it and/or  modify it under the terms of the GNU General Public License  as published by the Free Software Foundation; either version  2 of the License, or (at your option) any later version.  http://www.gnu.org/licenses/gpl.txt  Based on ctnl_test.c from libnetfilter-conntrack 0.0.31 (C) 2005 by   Pablo Neira Ayuso <pablo@eurodev.net>   and  Based on nfqnl_test.c from libnetfilter-queue 0.0.12*/using namespace std;#include <pthread.h>#include <fstream>#include <iostream>#include <getopt.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <signal.h>#include <map>#include "l7-conntrack.h"#include "l7-queue.h"#include "l7-classify.h"#include "util.h"extern "C" {#include <linux/netfilter.h>#include <libnetfilter_conntrack/libnetfilter_conntrack.h>#include <libnetfilter_queue/libnetfilter_queue.h>}static l7_conntrack* l7_connection_tracker;static l7_queue* l7_queue_tracker;static l7_classify* l7_classifier;// Configurable parametersextern int verbosity;extern int buflen;extern int maxpackets;extern string l7dir;extern unsigned int markmask;extern unsigned int maskfirstbit;extern unsigned int masknbits;extern int clobbermark;static void handle_sigint(int s) {  // was there a reason for this?  It just makes it crash on Ctrl-C for me.  //delete l7_connection_tracker;  exit(0);}//queue functions/* returns packet id */static u_int32_t print_pkt (struct nfq_data *tb){  int id = 0;  struct nfqnl_msg_packet_hdr *ph;  u_int32_t mark,ifi;   int ret;  char *data;    ph = nfq_get_msg_packet_hdr(tb);  if(ph){    id = ntohl(ph->packet_id);    printf("hw_protocol=0x%04x hook=%u id=%u ",      ntohs(ph->hw_protocol), ph->hook, id);  }    mark = nfq_get_nfmark(tb);  if (mark) printf("mark=%u ", mark);  ifi = nfq_get_indev(tb);  if(ifi) printf("indev=%u ", ifi);  ifi = nfq_get_outdev(tb);  if(ifi) printf("outdev=%u ", ifi);  ret = nfq_get_payload(tb, &data);  if (ret >= 0) printf("payload_len=%d ", ret);  putchar('\n');  return id;}static int cb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,  struct nfq_data *nfa, void *data) {  u_int32_t id = print_pkt(nfa);  l7printf(3, "entering callback\n");  return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);}static void * start_connection_tracking_thread(void *data) {  l7_connection_tracker->start();  pthread_exit(NULL);}static void * start_queue_thread(void * qnum) {  int * queuenum = (int *)qnum;  l7_queue_tracker->start(*queuenum);  pthread_exit(NULL);}// Checks whether the given mask has all its 1's in a row// and that it has enough room to work instatic int checkandparsemask(const unsigned int mask){  int i = 0;  masknbits = 0;  // it can start with 0 or more 0's  while((mask >> i)%2 == 0){    i++;    if(i >= 32) return false; // it's all zeros!  }    maskfirstbit = i;  // followed by 0 or more 1's  while((mask >> i)%2 == 1){     masknbits++;    i++;  }   if(masknbits < 2) return false; // need at least two bits to work with  // the rest has to be all 0's  for(; i < 32; i++)    if((mask >> i)%2 == 1)      return false;  return true;}static void handle_cmdline(int & qnum, string & conffilename,   int argc, char ** argv){  int dumb = 0; // whether to allow dumb things  qnum = 0; // default  buflen = 8*1500; //default (8 large packets worth)  conffilename = "";   const char *opts = "f:q:vh?sb:dn:p:m:c";  int done = 0;  while(!done)  {    char c;    switch(c = getopt(argc, argv, opts))    {      case -1:        done = 1;        break;      case 'f':        conffilename = optarg;        break;      case 'p':        l7dir = optarg;        break;      case 'q':        qnum = strtol(optarg, 0, 10);        if(qnum == LONG_MIN || qnum == LONG_MAX || qnum < 0 || qnum > 65535){          cerr << "Queue number is out of range. Valid numbers are 0-65535.\n";          exit(1);        }        break;      case 'b':        buflen = strtol(optarg, 0, 10);        if(buflen == LONG_MIN || buflen == LONG_MAX || 	   ((buflen < 1 || buflen > 65535) && !dumb)){          cerr << "Buffer length is out of range or you gave me a non-number.\n"            "Valid lengths are 0-65535. (65535 is an arbitrary limit. If you\n"            "are sure you need more, use the -d switch before this one.)\n";          exit(1);        }        break;      case 'n':        maxpackets = strtoll(optarg, 0, 10);        // never allow maxpackets to be less than one.        // Allow it to be outside of the range 3-16 only if -d is given        if(maxpackets == LONG_MIN || maxpackets == LONG_MAX || maxpackets < 1 ||           ((maxpackets < 3 || maxpackets > 16) && !dumb)){          cerr << "The number of packets is out of range or you gave me a\n"                  "non-number. Valid number are between 3 and 16. Or if you\n"                  "give the -d option before this one, I'll allow any\n"                  "positive integer.\n";          exit(1);        }        break;      case 'm':	markmask = strtoll(optarg, 0, 0);        if(errno == ERANGE){          cerr << "You seem to have given me a bogus mask.\n";          exit(1);        }	if(!checkandparsemask(markmask)){          cerr<<"I can only handle masks in which the asserted bits are "                "contiguous\n"                "For example: 0x0000fff0, but not 0xf000f000.\n"                "I also need at least two bits to work with.\n";          exit(1);        }        break;       case 'c':        clobbermark = 1;        break;             case 'v':        verbosity++;        break;      case 'd':        dumb = 1;        cout << "Allowing configurations that are probably ill-advised...\n";        break;      case 's':        verbosity = -1;        break;      case 'h':      case '?':      default:        cerr <<           "l7-filter v" << L7VERSION <<          ", (C) 2006-2007 Ethan Sommer, Matthew Strait\n"          "l7-filter comes with ABSOLUTELY NO WARRANTY. This is free software\n"          "and you may redistribute it under the terms of the GPLv2.\n"          "\n"          "Syntax: l7-filter -f configuration_file [options]\n"          "\n"          "Options are:\n"          "-q queuenumber\tListen to the specified Netfilter queue\n"          "-v\t\tBe verbose. Mutiple -v options increase the verbosity\n"          "-s\t\tBe silent except in the case of warnings and errors\n"          "-b bytes\tStore up to this many bytes of data per connection\n"          "-n packets\tExamine up to this many packets per connection\n"          "-p path\t\tLook for patterns in path instead of /etc/l7-protocols\n"          "-m mask\t\tOnly pay look at and set the given bits of marks\n"          "-c\t\tClobber existing marks instead of passing them unmodified\n"          "-d\t\tAllow configurations that are probably ill-advised\n"          "\n"          "See also 'man l7-filter'\n";        exit(1);        break;    }  }  if(conffilename == ""){    cerr << "You must specify a configuration file.  Try 'l7-filter -h'\n";    exit(1);  }}// Checks if the specified module is loaded.  Returns 1 if yes, 0 if no.static int check_for_module(string mod){  ifstream pm("/proc/modules");  if(!pm.is_open()){    cerr << "What the...?  Failed to open /proc/modules!\n";    return 0;  }  string line;  while(!pm.eof()){    getline(pm, line);    if(line.substr(0, mod.size()) == mod)      return 1;  }    return 0;}static void check_requirements(){  if(!check_for_module("ip_conntrack_netlink"))  {    cerr << "\n                      ***WARNING***\n"            "The ip_conntrack_netlink module does not appear to be loaded.\n"            "Unless you have it compiled into your kernel, please load it\n"            "and run l7-filter again.\n\n";    sleep(5); // give time for the user to notice the above.  }   }int main(int argc, char **argv) {  int rc, qnum;  string conffilename;  pthread_t connection_tracking_thread;  pthread_t queue_tracking_thread;  check_requirements();  handle_cmdline(qnum, conffilename, argc, argv);  signal(SIGINT, handle_sigint);  l7_classify * l7_classifier = new l7_classify(conffilename);  l7_connection_tracker = new l7_conntrack(l7_classifier);  l7_queue_tracker = new l7_queue(l7_connection_tracker);  //start up the connection tracking thread  rc = pthread_create(&connection_tracking_thread, NULL,	start_connection_tracking_thread, NULL);  if(rc){    cerr << "Error creating ct thread. pthread_create returned " << rc << endl;    exit(1);  }  //start up the queue thread  rc = pthread_create(&queue_tracking_thread, NULL, 	start_queue_thread, (void *)(&qnum));  if (rc){    cerr << "Error creating queue thread. pthread_create returned " <<rc <<endl;    exit(1);  }//  pthread_exit(NULL);  sleep(0xffffffff); // Sleep for 78 years (forever)}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人的天堂在线aⅴ视频| 51精品秘密在线观看| 久久成人久久鬼色| 图片区小说区区亚洲影院| 亚洲精品国产无套在线观| 综合色中文字幕| 成人欧美一区二区三区黑人麻豆| 国产精品视频在线看| 久久久久久99精品| 国产欧美日韩视频在线观看| 久久久精品免费网站| 国产精品天天摸av网| 国产精品你懂的| 亚洲女人****多毛耸耸8| 亚洲综合网站在线观看| 亚洲成人av在线电影| 奇米一区二区三区| 精品一区二区免费视频| 国产+成+人+亚洲欧洲自线| 99re6这里只有精品视频在线观看| 97成人超碰视| 91麻豆精品91久久久久同性| 日韩欧美国产高清| 国产精品午夜久久| 亚洲一区二区三区爽爽爽爽爽 | 欧美成人猛片aaaaaaa| 欧美xxxxxxxxx| 国产精品美女久久久久久2018 | 国产一区美女在线| av电影天堂一区二区在线| 91年精品国产| 制服丝袜激情欧洲亚洲| 久久久国产精品午夜一区ai换脸| 亚洲欧洲99久久| 日本一区中文字幕| 国产精品亚洲综合一区在线观看| 91网页版在线| 精品国产不卡一区二区三区| 国产精品毛片无遮挡高清| 日韩国产一二三区| 成人综合在线网站| 制服丝袜亚洲网站| 亚洲欧洲日韩综合一区二区| 视频一区在线播放| 99久久国产综合色|国产精品| 666欧美在线视频| 欧美精品一区二区三区久久久| 欧美一区二区在线看| 日韩成人一区二区| 色欧美日韩亚洲| 成人免费的视频| 欧美一区二区三区四区高清| 国产精品福利一区二区| 精品一区二区三区久久久| 91丨porny丨蝌蚪视频| 精品久久久久久无| 亚洲综合精品自拍| 成+人+亚洲+综合天堂| 日韩欧美一级二级三级久久久| 亚洲三级理论片| 国产成人亚洲综合a∨婷婷| 91精品久久久久久久99蜜桃| 亚洲情趣在线观看| 成人免费毛片aaaaa**| 精品精品欲导航| 亚洲国产综合色| 一本大道久久精品懂色aⅴ| 亚洲国产精品ⅴa在线观看| 久草这里只有精品视频| 欧美一级精品在线| 欧美a级一区二区| 91精品国产欧美一区二区18| 亚洲妇熟xx妇色黄| 欧美日韩亚洲国产综合| 亚洲午夜激情av| 欧美久久高跟鞋激| 婷婷中文字幕一区三区| 555夜色666亚洲国产免| 日韩激情在线观看| 日韩欧美国产不卡| 精品一区二区三区免费观看 | 亚洲素人一区二区| 91丨porny丨国产| 一区二区理论电影在线观看| 91国偷自产一区二区三区成为亚洲经典 | 在线视频欧美区| 国产精品全国免费观看高清 | 色综合网色综合| 国产精品丝袜久久久久久app| 久久精品国产免费| 69久久夜色精品国产69蝌蚪网| 天堂蜜桃一区二区三区| 色爱区综合激月婷婷| 亚洲色图视频免费播放| 成人国产精品免费观看动漫| 国产免费成人在线视频| 国产精品123区| 久久久久久久综合色一本| 国内一区二区在线| 欧美国产精品劲爆| 99国产精品久| 一区二区三区欧美日韩| 日本精品一区二区三区高清| 亚洲卡通动漫在线| 欧美亚洲动漫另类| 亚洲成人动漫精品| 99久久精品情趣| 日本午夜一区二区| 精品免费日韩av| 精品一区在线看| 国产欧美一区二区三区在线老狼| 夫妻av一区二区| 国产精品盗摄一区二区三区| av一区二区三区四区| 视频精品一区二区| 精品久久人人做人人爽| 高清国产一区二区| 亚洲女人****多毛耸耸8| 欧美日韩久久久久久| 蜜臀久久99精品久久久久宅男| 欧美一区日本一区韩国一区| 国产精品1区2区| 亚洲自拍偷拍九九九| 制服丝袜日韩国产| 国产成人综合在线| 亚洲一区二区偷拍精品| 欧美不卡在线视频| 国内精品国产三级国产a久久| 亚洲综合色网站| 精品久久一二三区| 在线观看精品一区| 国产精品香蕉一区二区三区| 亚洲男女毛片无遮挡| 欧美日韩在线三区| 久久爱www久久做| 亚洲欧洲日本在线| 日韩欧美国产成人一区二区| 91女人视频在线观看| 亚洲一区二区三区美女| 国产午夜精品理论片a级大结局| 在线视频一区二区三区| 国产伦精品一区二区三区免费迷| 一区二区激情视频| 国产欧美日韩综合精品一区二区| 欧美制服丝袜第一页| 久久99国产精品久久99果冻传媒| 亚洲男帅同性gay1069| 欧美mv日韩mv国产网站app| 色婷婷狠狠综合| 国产成人精品影院| 久久精品理论片| 亚洲18影院在线观看| 中文字幕一区二区三区视频 | 亚洲综合色在线| 中文字幕精品一区| 亚洲精品一区二区三区99| 欧美日韩一区国产| 91视频观看视频| 国产在线不卡一卡二卡三卡四卡| 韩国女主播一区二区三区| 午夜精品视频一区| 亚洲第一激情av| 亚洲综合一区二区三区| 亚洲欧美日韩在线不卡| 亚洲精品国产无天堂网2021| 国产精品久久久久aaaa| 中文字幕免费不卡在线| 26uuu久久综合| 欧美男同性恋视频网站| 欧美日韩高清一区二区| 在线一区二区观看| 色av综合在线| 91福利社在线观看| 欧洲av一区二区嗯嗯嗯啊| 大胆亚洲人体视频| 色88888久久久久久影院野外| 91丝袜美女网| 色哟哟日韩精品| 972aa.com艺术欧美| 国产一区二区福利视频| 97se亚洲国产综合自在线不卡| 91在线观看一区二区| 91在线视频播放地址| 色婷婷一区二区三区四区| 日本精品视频一区二区三区| 日韩免费一区二区三区在线播放| 日韩一二在线观看| 久久综合成人精品亚洲另类欧美 | 久久色在线视频| 久久久久97国产精华液好用吗| 久久久亚洲综合| 亚洲国产精品v| 成人免费在线观看入口| 久久国产尿小便嘘嘘| 成人精品高清在线| 色婷婷av一区| 日韩一区二区麻豆国产| 亚洲精品中文在线| 日一区二区三区| 懂色av一区二区三区免费观看|