首先让我向您展示代码...
#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 菜单,以便您可以轻松键入数字选项,然后让代码输出您选择的任何选项。
例如:
如果我选择选项 1
,它将向 IP 输出 SYN 洪水。
这就是开关盒菜单的全部要点。谢谢
最佳答案
您发布的错误是链接器错误,由函数 flood()
、dos()
和 scan()
的声明引起> 没有任何定义。如果您需要测试菜单,我建议为每个执行类似 printf
语句的操作定义“占位符”函数(或者您所做的,即将 printf 语句放在 case 中) ,但无论如何您最终都会在稍后更改它)直到您启动并运行实际的功能。
关于c - 如何修复 C 语言中的 switch case 菜单错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30826461/