0

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

1 回答 1

1

这里可能有很多事情是错误的:

  • traceroute可能不是默认PATH/bin/sh,
  • 字符串可能不是以零结尾的,
  • 缓冲区可能有一些printf无法显示给您的不可打印字符,
  • 您可能会收到带有部分命令的简短阅读,
  • 还要别的吗 ...

盲目地传递用户(或网络)输入以执行这样的操作是一个非常糟糕的主意TM 。做明确的检查。仅传递允许的命令。检查参数的正确性。

于 2012-09-20T19:14:21.930 回答