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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sf_ip.c

?? 著名的入侵檢測系統(tǒng)snort的最新版本的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*** Copyright (C) 1998-2006 Sourcefire, Inc.**** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License Version 2 as** published by the Free Software Foundation.  You may not use, modify or** distribute this program under any other version of the GNU General** Public License.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*//* * Adam Keeton * sf_ip.c * 11/17/06 * * Library for managing IP addresses of either v6 or v4 families.  */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h> /* For ceil */#include "sf_ip.h"#ifdef TESTER#define FatalError printf#endif/* Support function .. but could see some external uses */static INLINE int sfip_length(sfip_t *ip) {    ARG_CHECK1(ip, 0);    if(sfip_family(ip) == AF_INET) return 4;    return 16;}/* Support function */static INLINE int sfip_str_to_fam(char *str) {    ARG_CHECK1(str, 0);    if(strchr(str,(int)':')) return AF_INET6;    if(strchr(str,(int)'.')) return AF_INET;    return AF_UNSPEC;}/* Place-holder allocation incase we want to do something more indepth later */static INLINE sfip_t *_sfip_alloc() {    /* Note: using calloc here instead of SnortAlloc since the dynamic libs      * can't presently resolve SnortAlloc */    return (sfip_t*)calloc(sizeof(sfip_t), 1); }/* Masks off 'val' bits from the IP contained within 'ip' */static INLINE int sfip_cidr_mask(sfip_t *ip, int val) {    int i;    unsigned int mask = 0;     unsigned int *p;    int index = (int)ceil(val / 32.0) - 1;       ARG_CHECK1(ip, SFIP_ARG_ERR);    p = ip->ip32;    if( val < 0 ||        ((sfip_family(ip) == AF_INET6) && val > 128) ||        ((sfip_family(ip) == AF_INET) && val > 32) ) {        return SFIP_ARG_ERR;    }        /* Build the netmask by converting "val" into      * the corresponding number of bits that are set */    for(i = 0; i < 32- (val - (index * 32)); i++)        mask = (mask<<1) + 1;    p[index] = htonl((ntohl(p[index]) & ~mask));    index++;    /* 0 off the rest of the IP */    for( ; index<4; index++) p[index] = 0;    return SFIP_SUCCESS;}/* Allocate IP address from a character array describing the IP */sfip_t *sfip_alloc(char *ip, SFIP_RET *status) {    int tmp;    sfip_t *ret;       if(!ip) {        if(status)            *status = SFIP_ARG_ERR;        return NULL;    }    if((ret = _sfip_alloc()) == NULL) {        if(status)             *status = SFIP_ALLOC_ERR;        return NULL;    }        if( (tmp = sfip_pton(ip, ret)) != SFIP_SUCCESS) {        if(status)             *status = tmp;        sfip_free(ret);        return NULL;    }    if(status)         *status = SFIP_SUCCESS;    return ret;}/* Allocate IP address from an array of 8 byte integers */sfip_t *sfip_alloc_raw(void *ip, int family, SFIP_RET *status) {    sfip_t *ret;    if(!ip) {        if(status)            *status = SFIP_ARG_ERR;        return NULL;    }    if((ret = _sfip_alloc()) == NULL) {        if(status)            *status = SFIP_ALLOC_ERR;        return NULL;    }    ret->bits = (family==AF_INET?32:128);    ret->family = family;    /* XXX Replace with appropriate "high speed" copy */    memcpy(ret->ip8, ip, ret->bits/8);    if(status)        *status = SFIP_SUCCESS;    return ret;}/* Support function for _netmask_str_to_bit_count */static INLINE int _count_bits(unsigned int val) {    unsigned int count;     for (count = 0; val; count++) {        val &= val - 1;    }    return count;}/* Support function for sfip_pton.  Used for converting a netmask string * into a number of bits to mask off */static INLINE int _netmask_str_to_bit_count(char *mask, int family) {    u_int32_t buf[4];    int bits;    /* XXX      * Mask not validated.       * Only sfip_pton should be using this function, and using it safely.      * XXX */    if(inet_pton(family, mask, buf) < 1)        return -1;    if(family == AF_INET)        return _count_bits(buf[0]);     bits =  _count_bits(buf[0]);     bits += _count_bits(buf[1]);     bits += _count_bits(buf[2]);     bits += _count_bits(buf[3]);         return bits;}/* Parses "src" and stores results in "dst" */SFIP_RET sfip_pton(char *src, sfip_t *dst) {    char *mask;    char *sfip_buf;    char *ip;    int bits;    if(!dst || !src)         return SFIP_ARG_ERR;                if((sfip_buf = strdup(src)) == NULL)         return SFIP_ALLOC_ERR;    ip = sfip_buf;    dst->family = sfip_str_to_fam(src);    /* skip whitespace or opening bracket */    while(isspace((int)*ip) || *ip == '[')        ip++;    /* check for and extract a mask in CIDR form */    if( (mask = strchr(ip, (int)'/')) != NULL ) {        /* NULL out this character so inet_pton will see the          * correct ending to the IP string */        *mask = 0;        mask++;        /* verify a leading digit */        if(((dst->family == AF_INET6) && !isxdigit((int)*mask)) ||           ((dst->family == AF_INET) && !isdigit((int)*mask))) {            free(sfip_buf);                                      return SFIP_CIDR_ERR;        }        /* Check if there's a netmask here instead of the number of bits */        if(strchr(mask, (int)'.') || strchr(mask, (int)':'))             bits = _netmask_str_to_bit_count(mask, sfip_str_to_fam(mask));        else            bits = atoi(mask);    }    /* We've already skipped the leading whitespace, if there is more      * whitespace, then there's probably a netmask specified after it. */    else if( (mask = strchr(ip, (int)' ')) != NULL ||            /* If this is IPv4, ia ':' may used specified to indicate a netmask */             (dst->family == AF_INET && (mask = strchr(ip, (int)':')) != NULL) ) {        *mask = 0;  /* Now the IP will end at this point */        /* skip whitespace */        do {             mask++;        } while(isspace((int)*mask));        /* Make sure we're either looking at a valid digit, or a leading         * colon, such as can be the case with IPv6 */        if((dst->family == AF_INET && isdigit((int)*mask)) ||           (dst->family == AF_INET6 && (isxdigit((int)*mask) || *mask == ':'))) {             bits = _netmask_str_to_bit_count(mask, sfip_str_to_fam(mask));        }         /* No netmask */        else {             if(dst->family == AF_INET) bits = 32;            else bits = 128;                }    }    /* No netmask */    else {        if(dst->family == AF_INET) bits = 32;        else bits = 128;            }    if(inet_pton(dst->family, ip, dst->ip8) < 1) {        free(sfip_buf);                                  return SFIP_INET_PARSE_ERR;    }    /* Store mask */    dst->bits = bits;    /* Apply mask */    if(sfip_cidr_mask(dst, bits) != SFIP_SUCCESS) {        free(sfip_buf);        return SFIP_INVALID_MASK;    }        free(sfip_buf);    return SFIP_SUCCESS;}/* Sets existing IP, "dst", to be source IP, "src" */SFIP_RET sfip_set_raw(sfip_t *dst, void *src, int family) {        ARG_CHECK3(dst, src, dst->ip32, SFIP_ARG_ERR);    dst->family = family;    if(family == AF_INET) {        dst->ip32[0] = *(u_int32_t*)src;        memset(&dst->ip32[1], 0, 12);        dst->bits = 32;    } else if(family == AF_INET6) {        memcpy(dst->ip8, src, 16);        dst->bits = 128;    } else {        return SFIP_ARG_ERR;    }        return SFIP_SUCCESS;}/* Sets existing IP, "dst", to be source IP, "src" */SFIP_RET sfip_set_ip(sfip_t *dst, sfip_t *src) {    ARG_CHECK2(dst, src, SFIP_ARG_ERR);    dst->family = src->family;    dst->bits = src->bits;    dst->ip32[0] = src->ip32[0];    dst->ip32[1] = src->ip32[1];    dst->ip32[2] = src->ip32[2];    dst->ip32[3] = src->ip32[3];    return SFIP_SUCCESS;}/* Obfuscates an IP * Makes 'ip': ob | (ip & mask) */void sfip_obfuscate(sfip_t *ob, sfip_t *ip) {    unsigned int *ob_p, *ip_p;    int index, i;    unsigned int mask = 0;    if(!ob || !ip)        return;    ob_p = ob->ip32;    ip_p = ip->ip32;    /* Build the netmask by converting "val" into      * the corresponding number of bits that are set */    index = (int)ceil(ob->bits / 32.0) - 1;    for(i = 0; i < 32- (ob->bits - (index * 32)); i++)        mask = (mask<<1) + 1;    /* Note: The old-Snort obfuscation code uses !mask for masking.     * hence, this code uses the same algorithm as sfip_cidr_mask     * except the mask below is not negated. */    ip_p[index] = htonl((ntohl(ip_p[index]) & mask));    index++;    /* 0 off the rest of the IP */    for( ; index<4; index++) ip_p[index] = 0;    /* OR remaining pieces */    ip_p[0] |= ob_p[0];

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久机这里只有精品| 色综合久久久久综合| 一区二区三区在线观看国产| 欧美日本乱大交xxxxx| 国产精品乡下勾搭老头1| 石原莉奈在线亚洲二区| 亚洲欧洲一区二区在线播放| 日韩精品一区二区三区视频| 在线中文字幕一区| 成人一区二区三区视频在线观看| 五月天久久比比资源色| 亚洲视频一区二区免费在线观看| 日韩免费高清av| 欧美视频在线一区二区三区| 国产精品一区二区在线观看不卡| 日韩福利视频导航| 一区二区三区成人在线视频| 国产精品每日更新| 2021国产精品久久精品| 欧美一区二视频| 欧美日韩激情一区二区三区| 91一区二区三区在线播放| 7777精品伊人久久久大香线蕉| 成人综合在线观看| 国产成人免费av在线| 国模套图日韩精品一区二区| 奇米影视一区二区三区小说| 亚洲成人激情综合网| 一区二区三区四区在线| 国产精品国产三级国产aⅴ中文| 久久久亚洲精华液精华液精华液| 日韩一级片在线观看| 欧美狂野另类xxxxoooo| 欧美日韩一区二区在线观看视频| 在线免费视频一区二区| 91福利国产成人精品照片| 日本高清不卡视频| 91社区在线播放| 91视频一区二区| 91免费国产在线观看| 色综合咪咪久久| 91成人看片片| 欧美日韩国产一级片| 欧美日韩www| 欧美一卡二卡三卡| 精品第一国产综合精品aⅴ| 久久―日本道色综合久久| 久久久国产一区二区三区四区小说 | 国产一区二区成人久久免费影院 | 91精品国产综合久久精品app| 欧美视频在线一区二区三区 | 欧美性色综合网| 精品视频一区三区九区| 欧美精品777| 久久先锋影音av鲁色资源| 国产视频一区二区在线| 香蕉影视欧美成人| 午夜久久久影院| 欧美日韩久久不卡| 欧美一区二区视频在线观看| 日韩三级在线观看| 一区二区免费在线| 日韩女优av电影| 色婷婷一区二区| 成人美女视频在线看| 91看片淫黄大片一级| 精品一区免费av| 欧美日本韩国一区| 国产精品电影院| 日韩精彩视频在线观看| 在线亚洲高清视频| 91亚洲国产成人精品一区二三| 欧美一区二区三区免费视频| 亚洲天堂网中文字| 国产精品91一区二区| 欧美日韩久久一区| 亚洲你懂的在线视频| 国产精品资源在线| 在线成人免费视频| 亚洲综合精品久久| 99久久精品免费看国产免费软件| 欧美大片顶级少妇| 五月天激情小说综合| 91美女蜜桃在线| 亚洲欧洲美洲综合色网| 国产经典欧美精品| 精品久久久久久久久久久久久久久 | 懂色av一区二区在线播放| 日韩精品影音先锋| 午夜国产精品影院在线观看| 91在线国产观看| 欧美激情一区二区三区蜜桃视频| 美女在线视频一区| 一区二区久久久| 成人激情av网| 国产片一区二区| 国产高清久久久久| 久久久www免费人成精品| 裸体歌舞表演一区二区| 欧美一区二区三区在线观看视频| 午夜欧美大尺度福利影院在线看 | 2024国产精品| 久久99热99| 2021国产精品久久精品| 久久99精品久久久| 精品久久久久久久久久久院品网| 美女在线观看视频一区二区| 在线综合视频播放| 蜜桃一区二区三区四区| 欧美一级夜夜爽| 捆绑调教一区二区三区| 欧美va亚洲va香蕉在线 | 精品国产乱码久久久久久图片 | 一区二区三区自拍| 91福利国产成人精品照片| 亚洲综合一区在线| 欧美日韩视频专区在线播放| 亚洲18影院在线观看| 6080亚洲精品一区二区| 日韩精品久久久久久| 欧美一区二区在线播放| 麻豆91免费观看| 久久久久久久精| 成人app下载| 亚洲综合久久久| 欧美一级日韩免费不卡| 另类小说视频一区二区| 国产女主播视频一区二区| 91热门视频在线观看| 五月婷婷久久丁香| 欧美精品一区二区三区在线| 国产不卡高清在线观看视频| 国产精品卡一卡二卡三| 欧洲国产伦久久久久久久| 天天爽夜夜爽夜夜爽精品视频| 欧美一级日韩不卡播放免费| 国产美女精品一区二区三区| 中文字幕乱码一区二区免费| 99国产精品久| 青青草伊人久久| 国产欧美日韩不卡免费| 在线观看av一区| 精品一区在线看| 亚洲色图视频网站| 欧美一区二区三区日韩| 成人免费精品视频| 亚洲大片免费看| 久久久久久一级片| 欧美视频一区在线| 国内精品免费在线观看| 亚洲精品国产a| 精品国产免费人成电影在线观看四季| 不卡的av网站| 蜜桃久久久久久久| 亚洲欧美国产77777| 日韩一区二区三| 色婷婷久久综合| 激情深爱一区二区| 亚洲午夜一区二区| 国产欧美日韩另类视频免费观看| 欧美四级电影在线观看| 国产精品一区专区| 日韩激情一二三区| 椎名由奈av一区二区三区| 日韩精品在线看片z| 欧美性大战久久久久久久蜜臀| 国产电影一区二区三区| 亚洲sss视频在线视频| 国产精品乱人伦| 日韩欧美一区二区久久婷婷| 91美女视频网站| 国产成人在线视频网站| 日本欧美在线观看| 一区二区三区在线看| 国产精品美女一区二区三区| 日韩欧美电影在线| 精品污污网站免费看| 91视视频在线观看入口直接观看www| 免费亚洲电影在线| 亚洲一二三区不卡| 国产精品久久毛片a| 久久精品水蜜桃av综合天堂| 欧美精品xxxxbbbb| 色天天综合久久久久综合片| 国产999精品久久久久久绿帽| 日韩高清欧美激情| 一卡二卡三卡日韩欧美| 亚洲人成人一区二区在线观看 | 久久蜜桃一区二区| 欧美一级淫片007| 在线成人小视频| 欧美日韩免费在线视频| 一本一道久久a久久精品| 成人av在线观| 成人性色生活片免费看爆迷你毛片| 精彩视频一区二区| 国精产品一区一区三区mba视频| 日本aⅴ免费视频一区二区三区| 一区二区三区**美女毛片| 亚洲精品国产无套在线观|