0

私は、telnet クライアントから引数を受け取り、traceroute を実行し、情報を telnet クライアントに送り返す traceroute サーバーを開発しようとしています。たとえば、サーバーで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

ここで多くのことが間違っている可能性があります。

  • traceroutePATHのデフォルトではない可能性があります/bin/sh
  • 文字列はゼロで終了していない可能性があります。
  • バッファprintfには、表示されない印刷できない文字が含まれている可能性があります。
  • 部分的なコマンドで短い読み取りを受け取る場合があります。
  • 他に何か ...

そのような実行のためにユーザー (またはネットワーク) の入力をやみくもに渡すことは、非常に悪い考えTMです。明示的なチェックを行います。許可されたコマンドのみを渡します。引数の正確性をチェックしてください。

于 2012-09-20T19:14:21.930 に答える