2012-03-27 6 views
0

Windowsのコマンドプロンプト(CMD)でコマンド(「dir C:\」や「shutdown -r」など)をプログラムで実行し、黒のCMDウィンドウを表示せずに結果の出力を取得する方法を知りたいコース。プログラムによるコンソールとの対話をシミュレートする方法は?

私は->this link<-に必要なAPIのリストが含まれていると思われますが、どのAPIを選択するかわからないため、援助が必要です。

これは基本的に私が必要とするものです。単純なクライアントサーバーアプリケーション(WinSock)を書いて、ユーザーがクライアント側に座ってサーバーのコマンドプロンプトでコマンドを実行(および応答を読み取る)できるようにします。はい - Telnetと同じように動作しますが、Telnetはなく、Win32 APIだけです。

ユーザーがサーバー上で "dir"コマンドを実行するとします。彼はクライアントアプリケーションに「dir」と入力し、サーバーアプリケーションの要求をサーバーのコマンドプロンプトに物理的に入力した場合と同様に実行し、出力テキストをクライアントアプリケーションに返します。

答えて

0

この答えは、すべてがOKであることを確認している場合、それは正確にあなたがそれを必要とするように動作し、ポータブルソフトウェアのための良いものではありませんが:

int system(const char *command); 

この関数は、シェルでcommand(WindowsのCMD)を実行します可能な場合は。

"すべてがOKなら"というのは、あなたのOSにシェルがあり、それが利用可能であるということです。一般に、これはウィンドウに当てはまるはずです。

NULLで呼び出すと、シェルが使用可能かどうかはゼロ以外になります。実際のコマンドを指定すると、エラーを示す-1が返されます(たとえば、プロセスを起動できなかったなど)。または、OS依存のコマンドのステータスを返します。おそらくあなたが最も関心を持つのは「コマンドが失敗した場合」であり、返り値を0(0は良い)でチェックすることによってうまくいくはずです。

コマンドの出力を取得するには、出力をどこかに保存する必要があります。例えば、このようなdirのコマンドを実行します。

error = system("dir > temp.txt 2>&1"); 

をしてからtemp.txtから、その出力を取り出します。

+0

それは彼を助けません。彼は出力も望んでいる。 –

+0

@MikeKwanは、私が言ったように、彼は出力をファイルにリダイレクトしてから取り出すことができます。 – Shahbaz

+0

@Shahbaz、私は古くから 'system()'を使用していますが、出力を直接読むことができないことはいつも私を悩ませています。ファイルへのリダイレクトは実際にはエレガントな解決策ではありませんが、それ以上のオプションがない場合は、とにかく知っておくと良いです。しかし、私はまだより良い解決策を探しています。 –

3

基本的には、netcatの多くの可能な用途の1つを再実装しようとしています。コマンドプロンプトでWindowsシステム上で実行することにより:その後、

nc -l -L -e cmd -p 5555 

、あなたが話している正確に何を行うことができます192.168.1.xxxは、WindowsマシンのIPアドレスであることを別のシステム

nc 192.168.1.xxx 5555 

から実行しています:あなたが入力したものは、Windowsマシンで "タイプ"され、リモートで実行されたコマンドからの出力が得られます。隠しウィンドウでnetcatを実行することもできます。

この機能のため、いくつかのアンチウィルスはnetcatプログラムをブロックします...悪意のあるソフトウェアによって、被害者のPCをスレーブボットに変換するために使用されていることが明らかです。は、ポート5555に接続し、マシン上でコマンドを実行し、何かあなたが本当にドンすることができます任意のタイプの認証がないようcmdに直接(XPシェル)の入力/出力をルーティングすることは非常に危険であることを

も注意あなたが非常に管理された環境にいなければ許可したくありません。

+0

答えてくれてありがとうございますが、NetcatはWindowsの一部ではありません(Windows用のサードパーティ製のポートがあります)、それがあったとしても、これをプログラマチックに行う必要があります(より大きなクライアント/サーバープログラム)。手動テストの場合、netcatはすばらしいツールと思われます。 –

+0

@TX_:次にソースコードを取得します。 OpenBSDとその他のFree実装があります。 – MSalters

+0

@MSaltersでは、ライセンスされたコードを取得するだけではありません。彼のプログラムが互換性のあるライセンスの下にない場合、それは不可能です。 – Shahbaz

関連する問題