Мне нужно написать простое приложение te lnet на языке C с использованием сокетов TCP. Что я сделал, так это клиент и сервер, который работает с такими командами, как 'ls' или 'pwd', но мне нужна возможность использовать различные программы оболочки, такие как bash, sh, csh. Может кто-нибудь сказать мне, какие функции я должен использовать или как восстановить свой сервер? Потому что теперь, когда я использую команду "sh", сервер и клиент платят.
На самом деле у меня есть эта функция внутри клиента:
void chat(int sockfd){
char buff[MAX];
char text[MAX];
int n;
for (;;) {
bzero(buff, sizeof(buff));
printf("->: ");
n = 0;
while ((buff[n++] = getchar()) != '\n')
;
write(sockfd, buff, sizeof(buff));
if ((strncmp(buff, "exit", 4)) == 0) {
printf("Exiting...\n");
break;
}
bzero(buff, sizeof(buff));
read(sockfd, tex, sizeof(tex));
printf("Server message ->: %s", tex);
bzero(tex, MAX);
}
}
А эта внутри сервера:
void chat(int sockfd){
char buff[MAX];
int n,p[1];
FILE *fp;
char path[1024];
for(;;){
bzero(buff, MAX);
read(sockfd, buff, sizeof(buff));
fp = popen(buff, "r");
if(fp == NULL){
strncpy(buff, "Failed to run command", MAX);
write(sockfd, buff, sizeof(buff));
continue;
}
printf("%s\n", buff);
while(fgets(path, sizeof(path), fp) != NULL){
write(sockfd, path, sizeof(path));
}
pclose(fp);
}
}
Спасибо за внимание.