ÀÖÓãµç¾º



½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

ÍøÂç¹¥·ÀµÄÒÕÊõÖ®TCPЭÒéÆª

¸üÐÂʱ¼ä:2018Äê04ÔÂ26ÈÕ16ʱ39·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

1¡¢ ¸ÅÊö

ÍøÂç¹¥»÷µÄÖ÷ÒªÄÚÈݰüÀ¨ÏµÍ³°²È«¹¥·À¡¢ÍøÂ簲ȫ¹¥·À¡¢ÎïÀí¹¥»÷ÓëÉç»á¹¤³ÌѧÈý²¿·Ö£º ϵͳ°²È«¹¥·ÀÖ÷ÒªÊÇÀûÓÃÈí¼þ°²È«Â©¶´½øÐй¥»÷£¬ÍøÂ簲ȫ¹¥·ÀÀûÓÃЭÒéÕ»µÄ°²È«Â©¶´(²»¾ÖÏÞÓÚ´Ë)£¬ ÎïÀí¹¥»÷ÓëÉç»á¹¤³Ìѧ¹¥»÷Ö÷ÒªÊÇÀûÓÃÈ˵ÄÐÄÀïÈõµã¡¢ÎïÀíÉè¼ÆÈ±ÏÝ¡£

TCP(Transmission Control Protocol) ´«Êä¿ØÖÆÐ­ÒéÊÇTCP/IPЭÒéÕ»µÄºËÐÄЭÒ飬ËüλÓÚIPЭÒé²ãÖ®ÉÏ£¬ÔÚÍøÂçÉϵÄÁ½Ì¨¼ÆËã»úÖ®¼äÌṩ¿É¿¿µÄ¡¢ÓÐÐòµÄͨÐÅͨµÀ¡£Ðí¶àÓ¦ÓñÈÈçä¯ÀÀÆ÷¡¢SSH¡¢Telnet¡¢EmailµÈʹÓÃTCP½øÐÐͨÐÅ¡£TCPЭÒé´¦ÓÚΪӦÓÃÌṩÖ÷»úµ½Ö÷»úͨÐÅ·þÎñµÄ´«Êä²ã¡£

Ò»°ãÎÒÃǽ²TCPÌṩ¿É¿¿µÄÓÐÁ¬½Ó·þÎñ£¬Õâ¸ö¿É¿¿°üÀ¨Èý²ãº¬Òå

  • Êý¾ÝÓÐÐò´«Êä
  • ¶ª°üÖØ´«»úÖÆ
  • Á÷Á¿¿ØÖÆ»úÖÆ

2¡¢TCPЭÒéµÄ¹¤×÷Ô­Àí

ÎÒÃÇͨ¹ýÒ»¸ö¼òµ¥µÄTCP client³ÌÐòºÍTCP Server³ÌÐòÀ´Õ¹Ê¾TCP½¨Á¢Á¬½Ó¡¢Êý¾Ý´«Êä¡¢¶Ï¿ªÁ¬½ÓµÄ¹ý³Ì¡£ÒÔÏÂÕâÁ½¸ö³ÌÐòÖУ¬ÎªÁËÄÜÇåÎú˵Ã÷³ÌÐòµÄͨÐŹý³Ì£¬²»×öÈÝ´í´¦Àí£¬Á¦Çó¼òµ¥¡£¹¤×÷µ±ÖÐÕâÑùµÄ³ÌÐòÊDz»ÄÜÕý³£¹¤×÷µÄ¡£

2.1 TCP Client ³ÌÐò
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/ip.h>
 
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SER_ADDR "127.0.0.1"
#define SER_PORT 9999
//#define SER_ADDR "172.16.28.98"
 
/* main function */
int main(int argc, char *argv[])
{
        /**
         * Step 1: ´´½¨Ò»¸ösocket£¬ Ö¸¶¨SOCK_STREAM²ÎÊý´ú±í»ùÓÚTCPЭÒé
         *   Èç¹ûÊÇUDPЭÒ飬ÔòÐèÒªÓÃSOCK_DGRAM
         */
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
 
 
        /**
         * Step 2: ÉèÖÃÄ¿±êÖ÷»úIPµØÖ·ºÍ¶Ë¿ÚºÅ
         *   IP+Port£¬ ±êÊ¶ÍøÂçÉÏij¸öÖ÷»úµÄͨÐŽø³Ì
         */
    struct sockaddr_in dest;
    memset(&dest, 0, sizeof(struct sockaddr_in));
    dest.sin_family = AF_INET;
    dest.sin_addr.s_addr = inet_addr(SER_ADDR);
    dest.sin_port = htons(SER_PORT);
 
        /**
         * Step 3: Á¬½Ó·þÎñÆ÷
          */
    if (connect(sockfd, (struct sockaddr *)&dest,
                    sizeof(struct sockaddr_in)) != 0){
                /* ´Ë´¦SYN Flood¹¥»÷»áÓõ½ */
                fprintf(stdout, "Error for connect: %s\n", strerror(errno));
                return 1;
        }
 
        /**
         * Step 4: ÏòServer·¢ËÍÊý¾Ý
         */
 
        char *buffer1 = "Hello Server!\n";
    char *buffer2 = "Hello Again!\n";
    write(sockfd, buffer1, strlen(buffer1));
 
    write(sockfd, buffer2, strlen(buffer2));
 
        /**
         *  Step 5: ¹Ø±ÕÁ¬½Ó
         */
    close(sockfd);
 
        return 0;
}

Ò»¸ö¿Í»§¶Ë³ÌÐò´ó¸ÅÈçϼ¸¸ö²½Ö裺 1. ´´½¨Ò»¸ösocket£¬Í¨¹ý¹ýÖ¸¶¨²ÎÊýSOCK_STREAM,À´±êʶ»ùÓÚTCP´«Ê䣬 Èç¹ûÐèÒªÓÃUDPЭÒéµÄ»°£¬ÔòÐèÒªÖ¸¶¨SOCK_DGRAM. ÌØ±ðÖ¸³ö£¬Èç¹ûÐèҪͨ¹ýԭʼÌ×½Ó×Ö½øÐÐͨѶ£¬ÐèÒªÖ¸¶¨SOCK_RAW¡£ 2. Ö¸¶¨µØÖ·ÐÅÏ¢£¬ ÔÚÍøÂçÉÏ£¬ÎÒÃÇͨ¹ýIPµØÖ·ºÍPortÀ´±êʶһ¸öÌØ¶¨Ö÷»úÉϵĽø³Ì£¬´Ë´¦ÌîдServer¶ËµÄIPµØÖ·ºÍ¶ËºÅ¡£ 3. ÓëServer½¨Á¢Á¬½Ó£¬ TCPÊÇ»ùÓÚÁ¬½ÓÏÂЭÒ飬Òò´ËÔÚÊý¾Ý´«Êä֮ǰ£¬ÐèҪͨ¹ýÈý´ÎÎÕÊÖ½¨Á¢Á¬½Ó¡£ 4. ÊÕ·¢Êý¾Ý£¬ Ò»µ©Á¬½Ó½¨Á¢³É¹¦£¬C/SÁ½¶Ë¾Í¿ÉÒÔͨ¹ýwrite/send/sendto/sendmsg·¢ËÍÊý¾Ý£¬¿ÉÒÔͨ¹ýread/recv/recvfrom/recvmsg/½ÓÊÕÊý¾Ý 5. ¹Ø±ÕÁ¬½Ó£¬ µ±Êý¾ÝÊÕ·¢Íê±Ïºó£¬Á¬½Ó²»ÔÚÐèҪʱ£¬¿ÉÒÔͨ¹ýclose¶Ï¿ªÁ¬½Ó¡£

2.2 TCP Server³ÌÐò

ÏÂÃæÎÒÃDZàдһ¸öTCP Server³ÌÐò£¬»¹ÊÇÀÏ¹æ¾Ø£¬Á¦Çó¼òµ¥£¬²»×öÈÝ´í´¦Àí
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
 
#define SER_ADDR 9999
 
int main(int argc, char *argv[])
{
    int sockfd, newsockfd;
    struct sockaddr_in my_addr, client_addr;
    char buffer[100];
 
        /**
         * Step 1: ´´½¨Ò»¸ösocket£¬ Ö¸¶¨SOCK_STREAM´ú±íTCP
         */
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
 
        /**
         *  Step 2:   °ó¶¨Ò»¸ö¶Ë¿ÚºÅ
         */
    memset(&my_addr, 0, sizeof(struct sockaddr_in));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(SER_ADDR);
    bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr_in));
 
        /**
         * Step 3: ¼àÌýÁ¬½Ó
         */
    listen(sockfd, 5);
 
        fprintf(stdout, "Serve listenning....\n");
        while(1){
                /**
                 * Step 4: Accept Ò»¸öÁ¬½ÓÇëÇó
                 */
                socklen_t client_len = sizeof(client_addr);
                newsockfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_len);
 
                /**
                 * Step 5: ´Óµ±Ç°Á¬½Ó¶ÁÈ¡Êý¾Ý */
                memset(buffer, 0, sizeof(buffer));
                int len = read(newsockfd, buffer, 100);
                printf("Received %d bytes: %s", len, buffer);
 
                /**
                 * Step 6: ¹Ø±Õµ±Ç°Á´½Ó*/
                close(newsockfd);
        }
 
        /**
         * Step 7: ¹Ø±ÕÌ×½Ó×Ö
         */
        close(sockfd);
 
    return 0;
}

Ò»¸öServer³ÌÐòµÄ´óÖ²½ÖèΪ£º

1. ´´½¨Ò»¸ösocket

2. °ó¶¨Ò»¸ö¶Ë¿ÚºÅ

3. ¿ªÊ¼¼àÌý

4. ½ÓÊÜÒ»¸öÁ¬½ÓÇëÇó¡£

5. ÊÕ·¢Êý¾Ý

6. ¹Ø±ÕÁ¬½ÓÇëÇó

7. ¹Ø±Õsocket

ÆäÖÐ 4¡¢5¡¢6¿É×÷Ϊһ¸öÑ­»·£¬¶à´ÎÏìÓ¦Á¬½ÓÇëÇó¡£

2. 3 ÏÆ¿ªÊý¾Ý´«ÊäµÄÃæÉ´

Ò»µ©Á¬½Ó½¨Á¢£¬ OS·Ö±ðΪClient¶ËºÍServer¶ËÉêÇëÁ½¸öBuffer£¬ Ò»¸öÊÇSendBuffer£¬ÓÃÓÚ·¢ËÍÊý¾Ý£¬Ò»¸öÊÇReceiveBuffer£¬ÓÃÓÚ½ÓÊÕÊý¾Ý¡£ TCPЭÒéÊÇȫ˫¹¤µÄ£¬Á½¶Ë¶¼¿ÉÒÔ·¢ËͺͽÓÊÕÊý¾Ý¡£ÏêϸÁ÷³Ì¼ûÏÂͼ£º

ÕâÀïÃæÓм¸¸öÎÊÌ⣬ÎÒÃÇ´Ë´¦²¢²»»á¶ÔTCPЭÒéÍêÕûÕ¹¿ª½âÊÍ£¬Ñ¡È¡ºÍÎÒÃǺóÐø¿Î³ÌÏà¹ØÖØµãµÄÃèÊöһϣº

1.TCPÌá¹©ÃæÏòÁ¬½ÓµÄ·þÎñ, Á¬½ÓµÄ½¨Á¢¹ý³ÌÔÚÏÂÒ»Õ½ÚÖУ¬ÖصãÃèÊö¡£

2.Êý¾ÝÓÐÐò´«Êä? ÿ¸öÊý¾Ý°ü±à¸öÐòºÅ£¬Êý¾Ý°üµ½´ïÖ÷»ú¿ÉÄÜ´íÐò£¬ÔÚ´«Êä²ãµ÷Õû˳ÐòºóÉÏ´«¡£

3.¶ª°üÖØ´«»úÖÆ£ºÒýÈ뻬¶¯´°¿Ú»úÖÆ£¬ ´°¿ÚÄÚµÄÊý¾ÝÈç¹ûûÓнӵ½Ó¦´ðack£¬ “³¬Ê±”½øÐÐÖØ´«

4.Á÷Á¿¿ØÖÆ»úÖÆ£ºÒýÈ뻬¶¯´°¿Ú»úÖÆºó£¬½ÓÊÕ¶Ëʵʱ֪ͨ·¢ËͶ˵±Ç°×Ô¼º½ÓÊÜ´°¿Ú´óС£¬´Ó¶øÔ¼Êø·¢ËͶ˵ķ¢ËÍ£¬½øÐÐÁ÷Á¿¿ØÖÆ

TCP ²¿·ÖÒ»°ã³ÆÖ®ÎªSegment£¬ Êý¾Ý¶Î£¬ (²¹³ä£º ÔÚÓ¦Óòã--ÏûÏ¢¡¢´«Êä²ã--Êý¾Ý¶ÎSegment¡¢ÍøÂç²ã--°ü/·Ö×é packet¡¢ Á´Â·²ã--Ö¡frame¡¢ ÎïÀí²ãbits),¶ÔÓÚTCP headerµÄ¸ñʽÈçÉÏͼËùÊö£¬ Ïêϸ½â¶ÁÈçÏ£º

l Ô´¶Ë¿ÚºÅºÍÄ¿µÄ¶Ë¿ÚºÅ£¬ ¸÷Õ¼16bits

l 32λÐòºÅ (seq)

l 32λӦ´ðÐòºÅ(ack)

l TCP header³¤¶È£º 4룬 ÒÔ4×Ö½Ú¶ÈÁ¿£¬ ¹ÊHeader×Ϊ64×Ö½Ú

l ±£Áô£º 6λ

l ±ê־λ£º 6룬 °üÀ¨ SYN¡¢FIN¡¢ACK¡¢RST¡¢PSH¡¢URG

l »¬¶¯´°¿Ú£º 16룬 ¿ÉÓÃÓÚÁ÷Á¿¿ØÖÆ

l УÑ飺 16λ

l ½ô¼±Ö¸Õ룺16룬 µ±URG±êÖ¾ÖÃλʱ£¬ ´ËÖ¸ÕëÓÐЧ£¬ÓÃÓÚ´øÍâÊý¾Ý

l Ñ¡Ï0¡«320bits£¬ ÒÔ32bitsΪµ¥Î»£¬TCP¿ÉÒÔͨ¹ýoptionsЯ´øÒ»Ð©²¹³äÊý¾Ý

ÎÒÃǽ²£¬TCPÊÇÃæÏòÁ¬½ÓµÄ·þÎñ£¬ Òò´Ë¾Í´æÔÚ½¨Á¢Á¬½Ó£¬ ¶Ï¿ªÁ¬½ÓµÈ²Ù×÷¡£ºóÐøÎÒÃÇѡȡÕë¶ÔÁ¬½Ó½¨Á¢¹ý³ÌºÍÁ¬½Ó¶Ï¿ª¹ý³Ì½øÐй¥»÷·½ÃæµÄչʾ¡£

3. TCP SYN Flood ¹¥»÷

3.1 TCP ½¨Á¢Á¬½Ó(Èý´ÎÎÕÊÖ)

ÎÒÃÇ˵TCPÌá¹©ÃæÏòÁ¬½ÓµÄ·þÎñ£¬ Òò´ËÊý¾Ý·¢ËÍǰÐèÒªÏÈͨ¹ýÈý´ÎÎÕÊÖ½¨Á¢Á¬½Ó£º

1.µÚÒ»´ÎÎÕÊÖ£º Ê×Ïȿͻ§¶ËC(?)Ö÷¶¯·¢ÆðÁ¬½Ó£¬·¢ËÍSYN(Á¬½ÓÇëÇó±êÖ¾)£¬ ÒÔ¼°ÐòºÅSEQ=x(ÐòºÅxËæ»úÉú³É)µ½·þÎñÆ÷¶ËS¡£

2.µÚ¶þ´ÎÎÕÊÖ£º ·þÎñÆ÷¶ËS½ÓÊܵ½SYNºó£¬ Ïò¿Í»§¶ËCÒ²·¢ËÍSYN¼°ACK£¬ ÇÒack=x+1, ÒÔ¼°ÐòºÅSeq=y(ÐòºÅyËæ»úÉú³É)¡£

3.µÚÈý´ÎÎÕÊÖ£º ¿Í»§¶Ë½Óµ½SYN¼°ACKºó£¬ ºË²éackÊÇ·ñΪx+1, ÈôÕýÈ·£¬ Ôò¿Í»§¶ËC·¢ËÍACK ÇÒack=y+1£¬ÖÁ·þÎñÆ÷¶ËS¡£

4.·þÎñÆ÷¶ËS½ÓÊÕµ½ACK£¬ºË²éackÊÇ·ñΪy+1. ÈôÕýÈ·£¬ÔòÁ¬½ÓÕý³£½¨Á¢¡£

Èý·½ÎÕÊÖ½¨Á¢Á¬½ÓµÄ¹ý³ÌÏêϸ¼ûÏÂͼ

3.2 SYN Flooding ¹¥»÷

ÔÚ̽ÌÖSYN¹¥»÷֮ǰ£¬ÎÒÃÇÏÈ¿´¿´linuxÄں˶ÔSYNÊÇÔõô´¦ÀíµÄ£º 1. Server½ÓÊÕµ½SYNÁ¬½ÓÇëÇó¡£ ÄÚ²¿Î¬»¤Ò»¸ö¶ÓÁÐ(ÎÒÃÇÔݳÆÖ®°ëÁ¬½Ó¶ÓÁУ¬°ëÁ¬½Ó²¢²»×¼È·)£¬ ·¢ËÍack¼°syn¸øClient¶Ë£¬µÈ´ýClient¶ËµÄackÓ¦´ð£¬½ÓÊÕµ½ÔòÍê³ÉÈý´ÎÎÕÊÖ½¨Á¢Á¬½Ó¡£ Èç¹û½ÓÊÕ²»µ½ackÓ¦´ð£¬Ôò¸ù¾ÝÑÓÊ±ÖØ´«¹æÔò¼ÌÐø·¢ËÍack¼°syn¸ø¿Í»§¶Î¡£

ÀûÓÃÉÏÊöÌØµã¡£ÎÒÃǹ¹ÔìÍøÂç°ü£¬Ô´µØÖ·Ëæ»ú¹¹½¨£¬Òâζ×ŵ±Server½Óµ½SYN°üʱ£¬Ó¦´ðackºÍsynʱ²»»áµÃµ½»ØÓ¦¡£ÔÚÕâÖÖÇé¿öÏ£¬ Server¶Ë£¬Äں˾ͻáά³ÖÒ»¸öºÜ´óµÄ¶ÓÁÐÀ´¹ÜÀíÕâЩ°ëÁ¬½Ó¡£ µ±°ëÁ¬½Ó×ã¹»¶àµÄʱºò£¬¾Í»áµ¼ÖÂÐÂÀ´µÄÕý³£Á¬½ÓÇëÇóµÃ²»µ½ÏìÓ¦¡£ Ò²¾ÍÊÇËùνµÄDOS¹¥»÷¡£

Ïêϸ¼ûÏÂͼËùʾ£º

3.3 SYN Flood ¹¥»÷·À»¤ÊÖ¶Î

l tcp_max_syn_backlog£º °ëÁ¬½Ó¶ÓÁ㤶È

l tcp_synack_retries: syn+ack µÄÖØ´«´ÎÊý

l tcp_syncookies : syn dookie

Ò»°ãµÄ·ÀÓù´ëÊ©¾ÍÊǾÍÊǼõСSYN+ACKÖØ´«´ÎÊý£¬Ôö¼Ó°ëÁ¬½Ó¶ÓÁ㤶È£¬ÆôÓÃsyn cookie¡£²»¹ýÔÚ¸ßÇ¿¶È¹¥»÷ÃæÇ°£¬µ÷ÓÅ tcp_syn_retries ºÍ tcp_max_syn_backlog ²¢²»Äܽâ¾ö¸ù±¾ÎÊÌ⣬¸üÓÐЧµÄ·ÀÓùÊÖ¶ÎÊǼ¤»î tcp_syncookies£¬ÔÚÁ¬½ÓÕæÕý´´½¨ÆðÀ´Ö®Ç°£¬Ëü²¢²»»áÁ¢¿Ì¸øÇëÇó·ÖÅäÊý¾ÝÇø´æ´¢Á¬½Ó״̬£¬¶øÊÇͨ¹ý¹¹½¨Ò»¸ö´øÇ©ÃûµÄÐòºÅÀ´ÆÁ±ÎαÔìÇëÇó¡£

ÀÖÓã²¥¿ÍºÚÂí³ÌÐòÔ±C/C++ÓëÍøÂç¹¥·Àѧ¿ÆÅàÑø×¨Ïî°×ñ×Ó°²È«È˲Å£¬¿Î³Ì°üº¬ CÓïÑÔ¿ª·¢ÊµÕ½¡¢C¸ß¼¶±à³Ì¡¢C++ºËÐıà³ÌÓë×ÀÃæÓ¦Óÿª·¢¡¢Linux¸ß²¢·¢·þÎñÆ÷¿ª·¢¡¢ÐÅÏ¢°²È«ÓëÆóÒµÓ¦Óÿª·¢¡¢·Ö²¼Ê½ÔÆÆ½Ì¨¿ª·¢¡¢ÈëÇÖ¼ì²âÓëÍøÂç¹¥·ÀµÈ½×¶Î¡£

ºÚÂí³ÌÐòÔ±C/C++ÓëÍøÂç¹¥·À¿Î³Ì¹Ø¼ü¼¼Êõµã

Éæ¼°µ½µÄÈÈÃż¼ÊõÓУº·

Nginx(¸ß²¢·¢·´Ïò´úÀí·þÎñÆ÷)

·GIT(·Ö²¼Ê½°æ±¾¿ØÖÆÏµÍ³)

·Redis(NoSQL»º´æÊý¾Ý¿â)

·Memcache(key-value·Ö²¼Ê½»º´æÊý¾Ý¿â)

·Libevent(¸ß²¢·¢·´Ó¦¶ÑģʽAPI)

·Epoll(LinuxÄں˸߼¶¶à·IO¼¼Êõ)

·GDB(ÄæÏò¹¤¾ß)

·SHM(¹²ÏíÄÚ´æÓ³Éä»úÖÆ)

·VIM(Îı¾±à¼­Æ÷)

·QT(¿çƽ̨ӦÓýçÃæ¿ò¼Ü)

Éæ¼°µ½µÄÐÂÐ˼¼ÊõÓУº

·fastDFS(·Ö²¼Ê½Îļþϵͳ)

·Golang(GoogleÍÆ³öµÄ¿ª·¢±à³ÌÓïÑÔ)

·Docker(ÐéÄ⻯ÈÝÆ÷¼¼Êõ)

·Go-micro(GoÓïÑÔ΢·þÎñ¿ò¼Ü)

·Beego(GoÓïÑÔ¸ßÐÔÄÜweb·þÎñÆ÷¿ò¼Ü)

·GEO(µØÀíλÖúËÐÄËã·¨)

·ASN.1(¿çƽ̨°²È«´«ÊäЭÒé)

·RPC(Ô¶³Ìµ÷Óùý³Ì)

·Oracle(¸ß¼¶ÊÂÎñ¹ØÏµÐÍÊý¾Ý¿â)

Éæ¼°µ½µÄÍøÂç¹¥·À¼¼ÊõÓУº

·Kali Linux(Hacker²Ù×÷ϵͳ)

·Wireshark(ÍøÂç×¥°ü·ÖÎö¹¤¾ß)

·Aircrack-ng(¿ÉÆÆ½âWEP/WPA/WPA2¼ÓÃÜ)

·AppScan(©¶´É¨Ã蹤¾ß)

·DDos(·Ö²¼Ê½¾Ü¾ø·þÎñ¹¥»÷)

·WebÉøÍ¸(WebÒ³Ãæ´úÂëµÄ¹¥»÷ÐÎʽ)

·iptables(LinuxÄں˷À»ðǽ¼¼Êõ)

·NetCat(ÍøÂç¹¥»÷ÈðÊ¿¾üµ¶)

·TCPDump(LinuxÄÚºËÍøÂçЭÒé²¶×½Æ÷)

·SQLMAP(SQL×¢Èë©¶´¹¥·À¼¼ÄÜ)

±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍC/C++ÓëÍøÂç¹¥·ÀѧԺËùÓУ¬»¶Ó­×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»!

×÷ÕߣºÀÖÓã²¥¿ÍC/C++ÓëÍøÂç¹¥·ÀÅàѵѧԺ

Ê×·¢£ºhttp://c.itcast.cn/

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿