簡體   English   中英

如何在 C 中修復此開關盒菜單錯誤?

[英]How can I fix this switch case menu error in C?

那么首先讓我向您展示代碼......

#include <stdio.h>
#include <stdlib.h>
#include <string.h>    
#include <errno.h> 
#include <sys/socket.h>    
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <unistd.h>    


void load_menu(void);
void flood(void);
void dos(void);
void scan(void);


int main(int argc, char** argv)
{

    // Ip values
    const char* google_dns_server = "192.168.1.1";
    int dns_port = 53;

    struct sockaddr_in serv;

    int sock = socket ( AF_INET, SOCK_DGRAM, 0);

    //Socket could not be created
    if(sock < 0)
    {
        perror("Socket error");
    }

    printf ("                                                      \n");
    printf ("                 __     __   ____  ____               \n");
    printf ("                (  )   (  ) (  , |(  , |              \n");
    printf ("                 )(__  )__(  ) _/  ) _/               \n");
    printf ("                (____)(_)(_)(_)   (_)                 \n");  
    printf ("                                                      \n");     
    printf ("                   Version [0.1.0]                    \n");
    printf ("            https://github.com/Abrupt/Lapp            \n");
    printf ("                                                      \n");
    printf ("                                  Written by @Abrrupt \n");

    memset( &serv, 0, sizeof(serv) );
    serv.sin_family = AF_INET;
    serv.sin_addr.s_addr = inet_addr( google_dns_server );
    serv.sin_port = htons( dns_port );

    int err = connect( sock , (const struct sockaddr*) &serv , sizeof(serv) );

    struct sockaddr_in name;
    socklen_t namelen = sizeof(name);
    err = getsockname(sock, (struct sockaddr*) &name, &namelen);

    char buffer[100];
    const char* p = inet_ntop(AF_INET, &name.sin_addr, buffer, 100);

    if(p != NULL) {
        printf("Local ip: %s \n" , buffer);
    }
    else{
        printf ("Error number: %d . Error message: %s \n" , errno , strerror(errno));
    }

    close(sock);

    load_menu();
    return 0;
}

void load_menu(void)
{
    int choice;
    int num;
    int ch;

    do
    {
    printf("+------------------------------------------------------------------+\n");
    printf("|            Commands           |          Description             |\n");
    printf("+------------------------------------------------------------------+\n");

    printf("+------------------------------------------------------------------+\n");      
    printf("|(1) SYN Flood Attack           | Create a new flood;              |\n");
    printf("|(2) DoS Attack                 | Start a DoS attack;              |\n");
    printf("|(3) Port Scan                  | Run TCP port scan                |\n");
    printf("|(4) Delete_All                 | Delete all exisitng history;     |\n");
    printf("+------------------------------------------------------------------+\n");
    scanf("%d",&choice);

        switch(choice)
        {
            case 1: flood();
                break;
            case 2: dos();
                break;
            case 3: scan();
                break;
            case 4: printf("Quitting program!\n");
                exit( 0 );
                break;
            default: printf("Invalid choice!\n");
                break;
        }

    } while (choice != 3); 

    printf("use > ");
    scanf("%d",&num);

    /* Flushes input buffer from the newline from scanf() */
    while ( (ch = getchar()) != '\n' && ch != EOF) ;

    printf("\n\nPress ENTER to continue.");
    while ( (ch = getchar()) != '\n' && ch != EOF);

    return;
}

好吧,我有這個問題,它的輸出

"_dos", referenced from:
      _load_menu in menu-20c7bc.o
  "_flood", referenced from:
      _load_menu in menu-20c7bc.o
  "_scan", referenced from:
      _load_menu in menu-20c7bc.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我猜它與switch case menu 這個菜單的重點是讓用戶與選項進行交互(顯然)。

我想知道如何將 switch case 菜單修復到您可以輕松輸入數字選項的位置,然后讓代碼輸出您選擇的任何選項。

例如:

如果我選擇option 1 ,它將向 IP 輸出 SYN 洪水。

這就是 switch case 菜單的重點。 謝謝

您發布的錯誤是鏈接器錯誤,由函數flood()dos()scan()的聲明引起的沒有任何定義。 如果您需要測試菜單,我建議為每個執行類似printf語句的操作(或您所做的,將 printf 語句放在案例中,但您最終會無論如何稍后更改它),直到您啟動並運行實際的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM