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

📄 419.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="316.htm">上一层</a>][<a href="420.htm">下一篇</a>]
<hr><p align="left"><small>/* Scan Defense Deamon (SDD) */ <br>

#include <stdio.h> <br>

#include <stdlib.h> <br>

#include <unistd.h> <br>

#include <syslog.h> <br>

#include <sys/types.h> <br>

#include <sys/socket.h> <br>

#include <sys/wait.h> <br>

#include <sys/stat.h> <br>

#include <netinet/in.h> <br>

#include <arpa/inet.h> <br>

#include <netdb.h> <br>

#include <netinet/ip.h> <br>

#include <netinet/tcp.h> <br>

#include <time.h> <br>

#include <signal.h> <br>

#include <string.h> <br>

extern int errno; <br>

#define HOW_MANY 20 <br>

#define SCAN 25 <br>

#define NOPORT 80 <br>

#define SEC 1 <br>

#define SERVERPORT 2001 <br>



#ifndef NOFILE <br>

#define NOFILE 1024 <br>

#endif <br>

char *hostlookup(int i) <br>

{ <br>

    static char buff[256]; <br>

    struct in_addr ia; <br>

    struct hostent *he; <br>

    ia.s_addr = i; <br>

  <br>

    if (!(he = gethostbyaddr((char *)&ia, sizeof ia, AF_INET))) <br>

        strncpy(buff,inet_ntoa(ia),sizeof buff); <br>

    else <br>

        strncpy(buff,he->h_name,sizeof buff); <br>

    return buff; <br>

} <br>

char *servlookup(unsigned short port) <br>

{ <br>

    struct servent *se; <br>

    static char buff[256]; <br>

    se=getservbyport(port, "tcp"); <br>

        if(se == NULL) sprintf(buff, "port %d", ntohs(port)); <br>



            else sprintf(buff, "%s", se->s_name); <br>

    return buff; <br>

} <br>

struct ippkt{ <br>

    struct iphdr ip; <br>

    struct tcphdr tcp; <br>

} pkt; <br>

struct host{ <br>

    unsigned int from; <br>

    time_t t; <br>

    time_t start; <br>

    unsigned short low_port; <br>

    unsigned short hi_port; <br>

    int count; <br>

} hosts[HOW_MANY]; <br>

char *badips[HOW_MANY]; <br>

void demonize() <br>

{ <br>

    int fd, f; <br>

  <br>

  <br>

    if (getppid() != 1){ <br>



        signal(SIGTTOU,SIG_IGN); <br>

        signal(SIGTTIN,SIG_IGN); <br>

        signal(SIGTSTP,SIG_IGN); <br>

        f = fork(); <br>

        if (f < 0) <br>

            exit(-1); <br>

  <br>

        if (f > 0) <br>

             exit (0); <br>

    setpgrp(); <br>

    for (fd = 0 ; fd < NOFILE; fd++) close(fd); <br>

    chdir("/"); <br>

    umask(0); <br>

    return; <br>

    } <br>

} <br>

void init() <br>

{ <br>

    int i,ii; <br>

    time_t now; <br>

    now = time(NULL); <br>

    for (i = 0; i < HOW_MANY; i++) <br>



    hosts[i].t = now; <br>

} <br>

 start_server() <br>

{ <br>

int server_fd,server_len; <br>

struct sockaddr_in server_addr; <br>

if (server_fd= socket(AF_INET,SOCK_STREAM,0) == -1) exit(-1); <br>

server_addr.sin_family = AF_INET; <br>

server_addr.sin_addr.s_addr = htonl(INADDR_ANY); <br>

server_addr.sin_port = htons(SERVERPORT); <br>

server_len = sizeof(server_addr); <br>

if (bind(server_fd,(struct sockaddr *)&server_addr,server_len) == -1) exit(- <br>

1); <br>

listen(server_fd,3); <br>

return(server_fd); <br>

} <br>

int allocate(int *p, unsigned int addr) <br>

{ <br>

    int i, v = 0; <br>

    time_t tmp = hosts[0].t; <br>

    for(i = 0;i < HOW_MANY;i++){ <br>

        if (hosts[i].t <= tmp) { <br>



            tmp = hosts[i].t; <br>

            v = i; <br>

                    } <br>

        if (hosts[i].from == addr){ <br>

            *p = 1; <br>

            return i; <br>

                      } <br>

    } <br>

    *p = 0; <br>

    return v; <br>

} <br>

void creat_data() <br>

{ <br>

    int i,empty; <br>

    empty = 0; <br>

    for (i = 0; i < HOW_MANY; i++){ <br>

    if (hosts[i].count <= SCAN ) continue; <br>

  <br>

    memset(badips,0,HOW_MANY); <br>

    strcpy(badips[i],"IP:"); <br>

    strcat(badips[i],hostlookup(hosts[i].from)); <br>

        empty = 1; <br>



    } <br>

    if (empty==0) empty = -1; <br>

    strcpy(badips[0],"The data link is empty."); <br>

} <br>

int send_data(int sfd) <br>

{ <br>

int client_fd,client_len; <br>

struct sockaddr_in client_addr; <br>

creat_data(); <br>

client_fd = accept(sfd,(struct sockaddr *)&client_addr, &client_len); <br>

write(client_fd,badips[HOW_MANY],sizeof(*badips[HOW_MANY])); <br>

close(client_fd); <br>

 exit(0); <br>

} <br>

void no_zombie(int i) <br>

{ <br>

    wait(NULL); <br>

} <br>

int main (int argc, char **argv) <br>

{ <br>

    int s, index, was,sfd; <br>

    time_t now; <br>



printf(" \n\n\n          \x1b[31;40;1m        ********     *********       * <br>

******** \x1b[0m \n"); <br>

printf("  \x1b[31;40;1m              *          *   *         *     * <br>

  *\x1b[0m \n"); <br>

printf(" \x1b[31;40;1m              *            *  *          *    * <br>

    *\x1b[0m \n"); <br>

printf("       \x1b[31;40;1m        *            *  *           *   * <br>

     * \x1b[0m\n"); <br>

printf("      \x1b[31;40;1m          *              *            *  * <br>

      * \x1b[0m\n"); <br>

printf("       \x1b[31;40;1m            *           *            *  * <br>

      * \x1b[0m\n"); <br>

printf("  \x1b[31;40;1m                     *       *            *  * <br>

      * \x1b[0m\n"); <br>

printf("\x1b[31;40;1m                          *    *            *  * <br>

      * \x1b[0m\n"); <br>

printf("\x1b[31;40;1m              *            *   *           *   * <br>

     * \x1b[0m\n"); <br>

printf("  \x1b[31;40;1m             *           *   *          *    * <br>

    *\x1b[0m \n"); <br>

printf("    \x1b[31;40;1m            *         *    *         *     * <br>

   *\x1b[0m \n"); <br>



printf("  \x1b[31;40;1m                *******      *********       ******** <br>

** \x1b[0m\n\n"); <br>

/*  demonize();  */ <br>

    init(); <br>

    sfd = start_server(); <br>

    s = socket(AF_INET, SOCK_RAW, 6); <br>

    signal(SIGCHLD,no_zombie); <br>

    while(1){ <br>

        read(s, (struct ippkt*) &pkt, sizeof(pkt)); <br>

                now = time(NULL); <br>

        if ( pkt.tcp.dest == SERVERPORT ) { <br>

                        send_data(sfd);  /* 这里没做任何认证  */ <br>

                        continue; <br>

                          } <br>

    if (pkt.tcp.syn == 1 &&  pkt.tcp.ack == 0){ <br>

            index = allocate(&was,pkt.ip.saddr); <br>

             if (!was ){ <br>

  <br>

                hosts[index].from = pkt.ip.saddr; <br>

                hosts[index].low_port = pkt.tcp.dest; <br>

                hosts[index].hi_port = pkt.tcp.dest; <br>

                hosts[index].count = 1; <br>



                hosts[index].t = now; <br>

                hosts[index].start = now; <br>

                continue; <br>

                        } <br>

  <br>

            else if (now - SEC <= hosts[index].t){ <br>

                hosts[index].count++; <br>

                hosts[index].hi_port = pkt.tcp.dest; <br>

            } <br>

        hosts[index].t = now; <br>

        } <br>

    } <br>

} <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="316.htm">上一层</a>][<a href="420.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

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