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

📄 winstub.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
字号:
/* * cheap and dirty network database lookup functions  *//* * uses local files only  *//* * currently searches the protocols only  */#include <net-snmp/net-snmp-config.h>#include <net-snmp/net-snmp-includes.h>#if (defined(WIN32) || defined(cygwin) || defined(aix4))#ifdef aix4#define _NO_PROTO               /* Hack, you say ? */#endif#include <stdio.h>#include <sys/types.h>#if HAVE_STDLIB_H#include <stdlib.h>#endif#if HAVE_STRING_H#include <string.h>#endif#if HAVE_WINSOCK_H#include <winsock.h>#endif#if HAVE_NETINET_IN_H#include <netinet/in.h>#endif#if HAVE_NETDB_H#include <netdb.h>#endifstatic int      h_stay_open, s_stay_open, p_stay_open, n_stay_open;static FILE    *h_fp, *s_fp, *p_fp, *n_fp;static char    *p_fn;#ifdef notusedstatic char    *h_fn, *s_fn, *n_fn;#endif#ifdef aix4#define ROOT_BASE "/etc/"#define PROT_FN "protocols"#else#define ROOT_BASE "\\SYSTEM32\\DRIVERS\\ETC\\"#define PROT_FN "protocol"#endif#define HOST_FN "hosts"#define SERV_FN "services"#define NETW_FN "networks"static int      pre_env_done = 0;static voidpre_env(void){    const char     *cproot;    const char     *cp = "";    if (pre_env_done)        return;    pre_env_done = 1;#ifndef aix4    cp = getenv("SYSTEMROOT");    if (cp) {        ;        /*         * printf ("Root is '%s'\n", cp);          */    } else        cp = "C:\\WINNT";#endif    cproot = ROOT_BASE;    p_fn =        (char *) malloc(3 + strlen(cp) + strlen(cproot) + strlen(PROT_FN));    if (p_fn)        sprintf(p_fn, "%s%s%s", cp, cproot, PROT_FN);#ifdef notused    h_fn =        (char *) malloc(3 + strlen(cp) + strlen(cproot) + strlen(HOST_FN));    if (h_fn)        sprintf(h_fn, "%s%s%s", cp, cproot, HOST_FN);    s_fn =        (char *) malloc(3 + strlen(cp) + strlen(cproot) + strlen(SERV_FN));    if (s_fn)        sprintf(s_fn, "%s%s%s", cp, cproot, SERV_FN);    n_fn =        (char *) malloc(3 + strlen(cp) + strlen(cproot) + strlen(NETW_FN));    if (n_fn)        sprintf(n_fn, "%s%s%s", cp, cproot, NETW_FN);#endif}/* * sets can open. ends must close.  */voidendhostent(void){    if (h_fp)        fclose(h_fp);    h_fp = 0;}voidendservent(void){    if (s_fp)        fclose(s_fp);    s_fp = 0;}voidendprotoent(void){    if (p_fp)        fclose(p_fp);    p_fp = 0;}voidendnetent(void){    if (n_fp)        fclose(n_fp);    n_fp = 0;}voidsethostent(int stay_open){    pre_env();    endhostent();    h_stay_open = stay_open;}voidsetservent(int stay_open){    pre_env();    endservent();    s_stay_open = stay_open;}voidsetprotoent(int stay_open){    pre_env();    endprotoent();    p_stay_open = stay_open;}voidsetnetent(int stay_open){    pre_env();    endnetent();    n_stay_open = stay_open;}#define STRTOK_DELIMS " \t\n"/* * get next entry from data base file, or from NIS if possible.  *//* * returns 0 if there are no more entries to read.  */struct hostent *gethostent(void){    return 0;}struct servent *getservent(void){    return 0;}struct protoent *getprotoent(void){    char           *cp, **alp, lbuf[256];    static struct protoent spx;    static char    *ali[10];    struct protoent *px = &spx;    int             linecnt = 0;    char            *st;    for (alp = ali; *alp; free(*alp), *alp = 0, alp++);    if (px->p_name)        free(px->p_name);    px->p_aliases = ali;    if (!p_fn)        return 0;    if (!p_fp)        p_fp = fopen(p_fn, "r");    if (!p_fp)        return 0;    while (fgets(lbuf, sizeof(lbuf), p_fp)) {        linecnt++;        cp = lbuf;        if (*cp == '#')            continue;        cp = strtok_r(lbuf, STRTOK_DELIMS, &st);        if (!cp)            continue;        if (cp)            px->p_name = strdup(cp);        cp = strtok_r(NULL, STRTOK_DELIMS, &st);        if (!cp) {            free(px->p_name);            continue;        }        px->p_proto = (short) atoi(cp);        for (alp = px->p_aliases; cp; alp++) {            cp = strtok_r(NULL, STRTOK_DELIMS, &st);            if (!cp)                break;            if (*cp == '#')                break;            *alp = strdup(cp);        }        return (px);    }    return 0;}struct netent  *getnetent(void){    return 0;}struct netent  *getnetbyaddr(long net, int type){    return 0;}/* * Return the network number from an internet address  */u_longinet_netof(struct in_addr in){    register u_long i = ntohl(in.s_addr);    u_long          ii = (i >> 24) & 0xff;    if (0 == (ii & 0x80))        return ((0xff000000 & i) >> 24);    if (0x80 == (ii & 0xc0))        return ((0xffff0000 & i) >> 16);    /*     * if (0xc0 == (ii & 0xe0))     */    return ((0xffffff00 & i) >> 8);}/* * Return the host number from an internet address  */u_longinet_lnaof(struct in_addr in){    register u_long i = ntohl(in.s_addr);    u_long          ii = (i >> 24) & 0xff;    if (0 == (ii & 0x80))        return (0x00ffffff & i);    if (0x80 == (ii & 0xc0))        return (0x0000ffff & i);    /*     * if (0xc0 == (ii & 0xe0))      */    return (0x000000ff & i);}#endif                          /* WIN32 or cygwin */

⌨️ 快捷键说明

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