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

📄 265.htm

📁 unix高级编程原吗
💻 HTM
📖 第 1 页 / 共 2 页
字号:
        close( rsock ); <br>

        return 0; <br>

    } <br>

    rhost.sin_family = AF_INET; <br>

    memcpy( &rhost.sin_addr, hp->h_addr, hp->h_length ); <br>

    rhost.sin_port = htons( rport ); <br>



    printf( "connect to port: #%d\n", rport ); <br>

    if ( connect(rsock, (struct sockaddr *) &rhost, sizeof(rhost) ) < 0 ) <br>

    { <br>

        printf( "***connect failure.\n" ); <br>

        write( ms, cnmsg, strlen( cnmsg ) ); <br>

        close( rsock ); <br>

        return 0; <br>

    } <br>

    printf( "connected successfully.\n" ); <br>

    len = read( rsock, rbuf, 1024 ); rbuf[len] = '\0'; <br>

    printf( rbuf ); <br>

    while( strstr( rbuf, "220 ") == NULL ) <br>

    { <br>

        len = read( rsock, rbuf, 1024 ); rbuf[len] = '\0'; <br>

        printf( rbuf ); <br>

    } <br>

    write( rsock, "USER ftp\n", 9 ); <br>

    printf( "USER ftp sent.\n" ); <br>

    len = read( rsock, rbuf, sizeof( rbuf ) ); rbuf[len] = '\0'; <br>

    printf( rbuf ); <br>

    if ( memcmp( rbuf, "331 ", 4 ) == 0 ) <br>

    { <br>

    { <br>

        write( rsock, "PASS guest@\n", 12 ); <br>

        len = read( rsock, rbuf, sizeof( rbuf ) );rbuf[len] = '\0'; <br>

    } <br>

    tok = "230 "; <br>

    ca = strstr( buffer, " HTTP/1.0" ); <br>

    len = ca - buffer - 10 - strlen( tmp ) ; <br>

    ca = buffer + 10 + strlen( tmp ); <br>

    memcpy( tmp, ca, len ); <br>

    tmp[len]='\0'; <br>

    if ( len > 0 ) <br>

    { <br>

        while( memcmp( rbuf, "230 ", 4 ) != 0 && strstr(rbuf,"\n230 ") == NU <br>

LL ) <br>

        { <br>

            len =read( rsock, rbuf, sizeof( rbuf )); <br>

            rbuf[len] = '\0'; <br>

        } <br>

        tok = "250 "; <br>

        sprintf( buffer, "CWD %s\n", tmp ); <br>

        printf( buffer ); <br>

        write( rsock, buffer, strlen( buffer ) ); <br>

        len = read( rsock, rbuf, sizeof( rbuf ) ); rbuf[len] = '\0'; <br>



    } <br>

    if ( memcmp( rbuf, "550 ", 4 ) == 0 ) <br>

    { <br>

        int data1; <br>

        char temp[40]; <br>

    /* get file */ <br>

        ca = strrchr( tmp, '/' ); <br>

        strcpy( temp, ca+1 ); <br>

        *(ca +1) = '\0'; <br>

        sprintf( buffer, "CWD %s\n", tmp ); <br>

        printf( buffer ); <br>

        write( rsock, buffer, strlen( buffer )); <br>

        len = read( rsock, rbuf, sizeof( rbuf ));rbuf[len]='\0'; <br>

        printf( rbuf ); <br>

        while( strstr( rbuf, "250 " ) == NULL) <br>

        { <br>

            len = read( rsock, rbuf, sizeof( rbuf)); <br>

            rbuf[len] = '\0'; <br>

        } <br>

        write( rsock, "TYPE I\n", 7 ); <br>

        read( rsock, rbuf, sizeof( rbuf) ); <br>

        initconn( rsock ); <br>



        sprintf( buffer, "RETR %s\n", temp ); <br>

        printf( buffer ); <br>

        write( rsock, buffer, strlen( buffer) ); <br>

        read( rsock, rbuf, sizeof( rbuf ) ); <br>

        printf( rbuf ); <br>

        if ( memcmp( rbuf, "550 ", 4 ) != 0 ) <br>

        { <br>

        data1 = accept( data, (struct sockaddr *)NULL, (int * )NULL ); <br>

        l = 0; <br>

        do <br>

        { <br>

            memset( rbuf, 0, sizeof( rbuf) ); <br>

            if (( len = read( data1, rbuf, sizeof( rbuf) )) < 0) <br>

                puts( "Error in read stream message." ); <br>

            else if ( len == 0 ) <br>

                puts( "\n[ftp : end of connection.]\n" ); <br>

            else <br>

            { <br>

                write( ms, rbuf, len ); <br>

                l += len; <br>

                printf( "%d - Received bytes : %ld\n", count, l ); <br>

            } <br>

            } <br>

        } while( len != 0 ); <br>

        close( data1 ); <br>

        } <br>

        close( data ); <br>

    } <br>

    else <br>

    { <br>

    /* list directory */ <br>

        int data1; <br>

        char temp[40]; <br>

        if ( tmp[0] == '\0' ) strcpy( tmp, "/" ); <br>

        sprintf( temp, "<TITLE>FTP Catalog of %s</TITLE>\n", tmp ); <br>

        write( ms, temp, strlen( temp )); <br>

        sprintf( temp, "<H2>Directory of %s</H2><PRE><HR>", <br>

                 tmp ); <br>

        write( ms, temp, strlen( temp ) ); <br>

        if ( memcmp( rbuf, tok, 4) != 0 ) <br>

        { <br>

            len = strlen( rbuf ); rbuf[len] = '\0'; <br>

            sprintf( tmp, "\n%s", tok ); <br>

            while( memcmp( rbuf, tok, 4) != 0 && strstr(rbuf,tmp) == NULL) <br>

            { <br>

            { <br>

                write( ms, rbuf, len ); <br>

                len = read( rsock, rbuf, sizeof( rbuf ) );rbuf[len] = '\0'; <br>

            } <br>

            write( ms, rbuf, len ); <br>

            write( ms, "<HR>\n", 5 ); <br>

        } <br>

        write( rsock, "TYPE A\n", 7 ); <br>

        len = read( rsock, rbuf, sizeof( rbuf) ); rbuf[len] = '\0'; <br>

        printf( rbuf ); <br>

        initconn( rsock ); <br>

        write( rsock, "LIST\n", 5 ); <br>

        len = read( rsock, rbuf, sizeof( rbuf) ); rbuf[len] = '\0'; <br>

        printf( rbuf ); <br>

        if ( memcmp( rbuf, "550 ", 4 ) != 0 ) <br>

        { <br>

            data1 = accept( data, (struct sockaddr *)NULL, (int * )NULL ); <br>

            do <br>

            { <br>

                memset( rbuf, 0, sizeof( rbuf) ); <br>

                if (( len = read( data1, rbuf, sizeof( rbuf) )) < 0) <br>

                    puts( "Error in read stream message." ); <br>

                else if ( len == 0 ) <br>



                    puts( "\n[ftp : end of connection.]\n" ); <br>

                else <br>

                { <br>

                    printf( rbuf ); <br>

                    write( ms, rbuf, len ); <br>

                } <br>

            } while( len != 0 ); <br>

            write( ms, "</PRE>", 6 ); <br>

            close( data1 ); <br>

        } <br>

        close( data ); <br>

    } <br>

    write( rsock, "QUIT\n", 5 ); <br>

    len=read( rsock, rbuf, sizeof( rbuf )); rbuf[len] = '\0'; <br>

    printf( rbuf ); <br>

    close( rsock ); <br>

    return 0; <br>

} <br>

int processsock( int ms, char * buffer ) <br>

{ <br>

    if ( memcmp( buffer, "GET http://", 11 ) == 0 && <br>

         strstr( buffer, "Proxy-Connection: ") != NULL ) <br>



    { <br>

        return http_proxy( ms, buffer ); <br>

    } <br>

    else if ( memcmp( buffer, "POST http://", 12 ) == 0 && <br>

         strstr( buffer, "Proxy-Connection: ") != NULL ) <br>

    { <br>

        return http_proxy( ms, buffer ); <br>

    } <br>

    else if ( memcmp( buffer, "GET ftp://", 10 ) == 0 && <br>

         strstr( buffer, "Proxy-Connection: ") != NULL ) <br>

    { <br>

        return ftp_proxy( ms, buffer ); <br>

    } <br>

    else /* unknown service, just echo */ <br>

    { <br>

        printf( "%s", buffer ); <br>

        write( ms, buffer, strlen( buffer ) ); <br>

    } <br>

    return 1; <br>

} <br>

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

{ <br>

{ <br>

    int sock, portnum, length; <br>

    struct sockaddr_in server; <br>

    struct sockaddr_in peername; <br>

    int msgsock, rval ; <br>

    printf( "Hu's MiniProxy ver 1.15 (c)Copyright 1996 Hu Qiwei, Tsinghua Un <br>

iv.\ <br>

n" ); <br>

    if ( argc > 1 ) <br>

    { <br>

        portnum = atoi( argv[1] ); <br>

        if (portnum < 80) portnum = 80; <br>

    } <br>

    else <br>

    { <br>

        printf( "USAGE : proxy [portnum]\n" ); <br>

      /*  exit( 2 ); <br>

*/ <br>

        portnum=8787; <br>

    } <br>

    signal( SIGCLD, SIG_IGN ); <br>

    sock = socket( AF_INET, SOCK_STREAM, 0 ); <br>

    if ( sock < 0 ) <br>



    { <br>

        puts( "Error in create socket!" ); <br>

        exit( 1 ); <br>

    } <br>

    server.sin_family = AF_INET; <br>

    server.sin_addr.s_addr = INADDR_ANY; <br>

    server.sin_port = htons(portnum); <br>

    if ( bind( sock, (struct sockaddr *)&server, sizeof( server ) ) < 0 ) <br>

    { <br>

        puts( "Error in bind stream." ); <br>

        exit( 1 ); <br>

    } <br>

    length = sizeof( server ); <br>

    if ( getsockname( sock, (struct sockaddr * )&server, &length ) < 0 ) <br>

    { <br>

        puts( "Error in get sock name!" ); <br>

        exit( 1 ); <br>

    } <br>

    printf( "The socket port number has been assigned to #%d\n\n", <br>

            ntohs( server.sin_port ) ); <br>

    listen( sock, 20 ); <br>

    while( 1 ) <br>

    while( 1 ) <br>

    { <br>

    msgsock = accept( sock, (struct sockaddr *)NULL, (int * )NULL ); <br>

    if ( msgsock == -1 ) <br>

        { <br>

            puts( "Error in accept!" ); <br>

            exit( 1 ); <br>

        } <br>

    else <br>

        if ( fork() == 0 ) <br>

        { <br>

            length = sizeof ( peername ); <br>

            getpeername(msgsock, (struct sockaddr *)&peername, &length ); <br>

            printf( "##[%d - Connected to client: %s]\n\n", count, <br>

                    inet_ntoa( peername.sin_addr ) ); <br>

            do <br>

            { <br>

                memset( buf, 0, 1024 ); <br>

                if (( rval = read( msgsock, buf, 1024 )) < 0) <br>

                    puts( "Error in read stream message." ); <br>

                else if ( rval == 0 ) <br>

                    puts( "\n[End of connection.]\n" ); <br>

                else <br>



                { <br>

                    rval = processsock( msgsock, buf ); <br>

                } <br>

            } while( rval != 0 ); <br>

            printf( "##[%d - Shutdown connection to client: %s]\n\n", count, <br>

  <br>

                   inet_ntoa(peername.sin_addr) ); <br>

            shutdown( msgsock, 2 ); <br>

            _exit( 0 ); <br>

        } <br>

        printf( "Service #%d resolved.\n", count++ ); <br>

        close( msgsock ); <br>

    }; <br>

    exit( 0 ); <br>

} <br>

-- <br>

※ 修改:·zinger 於 Nov 13 20:53:33 修改本文·[FROM:   210.34.11.167] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="192.htm">上一层</a>][<a href="266.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 + -