我正在尝试开发一个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/