我正在尝试开发一个traceroute服务器,该服务器从telnet客户端接受参数,然后执行traceroute并将信息发送回telnet客户端。我正在从服务器的telnet客户端接收参数,例如traceroute www.google.com但是当我尝试执行它时,它给了我一个奇怪的错误:

: Name or service not known
' on position 1 (argc 1)line arg `www.google.com


我发现奇怪的是,当我在服务器端对命令进行硬编码时,它可以正常工作;当我在服务器端接收到该命令并将其打印出来时,也可以正常工作。但是,在字符数组中收到的同一命令将无法执行,并出现上述错误。

这是我的代码:

int main() {
int sockfd,new_fd;
char client_arg[100];

//Create a socket and establish the connection

if (recv(new_fd,client_arg,100,0)== -1)
            perror("recv");

printf("%s\n",client_arg); // prints traceroute www.google.com
system(client_arg);

return 0;
}

最佳答案

许多事情在这里可能是错误的:


traceroute可能不在PATH的默认/bin/sh中,
字符串不能以零结尾,
缓冲区中可能包含一些无法打印的字符,而printf不会显示给您,
您可能会通过部分命令获得简短的阅读内容,
还要别的吗 ...


像这样盲目传递用户(或网络)输入以执行代码是非常不好的主意。做显式检查。仅传递允许的命令。检查参数的正确性。

关于c - 系统命令traceroute c中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12519048/

10-14 22:09
查看更多