[英]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.