• ベストアンサー

telnet(delphi+indy)で処理を自動化したい

処理を自動化を考えていて、特定文字(例えばプロプトや、yes/noを聞いてくるような場合)を受信するのを待ち、そのプロンプトが返ってきたら、次に移る・・・・というような感じにしたいのです。 他言語での例を言うと、teratermマクロの中の「wait関数」みたいな感じに・・ wait "login" とかして、loginが表示されるのを待って、ユーザー名を送信 wait "Password" とかでパスワードを求められたら、パスワードを送信とかしたいのですが、出来ますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mimis
  • ベストアンサー率66% (16/24)
回答No.1

Indyのデモを下記のように変更すればUsernmae:という文字列を 受信したときだけ、ユーザー名を自動的に入力します。 複数コマンドに対応するには、TStringListなどを使えば 簡単に対応できます。 procedure TfrmTelnetDemo.IdTelnetDemoDataAvailable(Sender: TIdTelnet; const Buffer: String); const CR = #13; LF = #10; var Start, Stop : Integer; i : Integer; //追加 s,rev : string; //追加 begin if Memo1.Lines.Count = 0 then Memo1.Lines.Add(''); Start := 1; Stop := Pos(CR, Buffer); if Stop = 0 then Stop := Length(Buffer) + 1; while Start <= Length(Buffer) do begin Memo1.Lines.Strings[Memo1.Lines.Count - 1] := Memo1.Lines.Strings[Memo1.Lines.Count - 1] + Copy(Buffer, Start, Stop - Start); rev := Copy(Buffer, Start, Stop - Start); //追加 if Buffer[Stop] = CR then begin Memo1.Lines.Add(''); end; Start := Stop + 1; if Start > Length(Buffer) then Break; if Buffer[Start] = LF then Start := Start + 1; Stop := Start; while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do Stop := Stop + 1; end; //ここで受信が終了しているのでコマンドを送信 if Pos('Username:',rev) > 0 then begin //追加 s := 'hogehoge'; //追加 for i := 1 to length(s) do //追加 IdTelnetDemo.SendCh(s[i]); //追加 IdTelnetDemo.SendCh(#13); //追加 //ここまで end; end;

serafu3
質問者

お礼

おお・・ こんな感じに書けばいいんですね。 大変参考になりました。 やっと、プログラムの続きにいけます. ありがとうございましたm(__)m

関連するQ&A

  • teratermマクロを使ったログイン

    teratermの初心者です。 今、teratermのマクロで”telnetを使ってwindowsマシンにログインする” という基本的な所を作ろうとしているのですが、 teratermインストールディレクトリ内の「login.ttl」を参考に記述し、 コマンドプロンプトから起動をかけると"connect 'ホスト名'"の行で 必ず止まってしまいます。 下記の記述で何処を修正すべきか、ご指摘頂けますと幸いです。 ===================================== testlink if result=0 connect'host' connect 'ホスト名' UsernamePrompt = 'login:' Username = 'ユーザー名\ドメイン' PasswordPrompt = 'Password:' Password = 'パスワード' wait UsernamePrompt sendln Username wait PasswordPrompt sendln Password ===================================== どうぞ宜しくお願い致します。

  • ttlコマンドでのtelnet接続について

    teratermのマクロ機能を使用してtelnet接続の自動化をしたいと考えています。 いろいろなサイトを見て ****************************************** HOSTADDR = '接続先IPアドレス' USERNAME = 'ユーザ名' PASSWORD = 'パスワード' COMMAND = HOSTADDR strconcat COMMAND ':23 /nossh /T=1' connect COMMAND wait 'login:' sendln USERNAME wait 'Password:' sendln PASSWORD end ****************************************** でできることができたのですが、使用者にアカウント名、パスワード名を知られたくありません。 【やりたいこと】 (1) 1. ttlファイルを実行する 2. 接続先のIPアドレスを入力する 3. 自動でtelnet接続する。 (2) 上記に加えて使用者にttlファイルの中身を参照されたときにアカウント、パスワードがわからないようにする。 ⇒暗号化されたファイルを読み込むようにする? (1)-2についても実装できていません。 アドバイスをお願いします。

  • telnet使用時に求められる、loginとpasswordについて

    現在DOSプロンプトの勉強をしている yukidesuyoと申します。 質問ですが、 自宅LANのパソコンにtelnetで接続しようとしたところ、 loginとpasswordを入力しても入れず困っています。 ユーザアカウントの名前とパスワードを入力すると 入れるのかなと思い、入力してもpasswordがはじかれます。 ここに入力するloginとpasswordとは何ですか? 返答のほどよろしくお願いします。

  • delphiでtelnet(indy)

    IndyのTIdTelnetコンポーネントを使ってtelnetをするプログラムを作っているのですが、プロンプト待ちをするようなプログラムがよく分りません。 コマンドを「ls」などをうって、処理が終わりプロンプトが返ってくるまで処理を止める・・・・というようなのは、どのようにすればできるでしょうか?

  • TeraTermマクロについて

    TeraTremのマクロを作成しています。 connect \'ホスト名\' UsernamePrompt = \'login:\' Username = \'ログイン\' PasswordPrompt = \'Password:\' Password = \'パスワード\' wait UsernamePrompt sendln Username wait PasswordPrompt sendln Password sendln \'df -k\' これでディスク容量を表示させることが出来ました。 表示された内容をファイルに出力する方法は、ありますでしょうか? 色々試してみましたが上手くいきません。 この方法でなくても自動でディスク容量を取得できる方法がありましたら教えて下さい。 よろしくお願いします。

  • vc++でtelnet

    お世話になります。 現在、コマンドプロンプトでtelnetを起動し、ある特定のコマンドを投げている作業があります。特定のコマンドが、一つのパラメーターが違うだけなので、ボタンを押してそのコマンドを投げられるような画面を作って...と言われました。 CreateProcessを使って、cmd→telnet→標準出力...で、 (1)画面アプリ起動(初期処理:CreatePorcess(cmd telnet xxx.xxx.xxx.xxx)) (2)ボタンクリック (3)cout << abc 1 2 3 <<endl (コマンド投入) (4)ボタンクリック (5)cout << abc 1 2 4 <<endl etc.. (6)終了ボタンclick(telnet終了:quit、cmd終了:exit) などでいけるかなと思ったのですが、(3)でアプリ画面のほうに制御が戻ってきません。 コンソール画面を表示して確認すると、投入はできてる感じで、入力待ちになってるようです。 そこでenterを押しても画面には戻らず、、enter→quitで戻る?! 通信系は苦手ですが、コマンドプロンプトでやってることをそのままだから とは思ったものの...omz 根本的に間違っているでしょうか? サンプルコードも探したのですが、見つからず質問させていただきました。 teratermマクロ...など見つけたのですが敷居が高いのとteratermのインストールは×みたいで。webアプリも駄目といわれ。。。 どうかアドバイスをお願いいたします!

  • [WSH|JS|VB] telnetコマンドの標準出力を受け取りたい

    こんにちは。 Windows Scripting Host(WSH)でtelnetコマンドのオートパイロット(自動操縦)をしたいと思っています。 そこで、ログインプロンプトなどを待つ際、waitで時間で待つのではなく、「login:」という文字を待ってログインするようにしたいのですが、できるでしょうか?教えてください。 WSHをご存知ない場合は、VBの範囲でお答えいただければと思います。適用できる可能性がありますので。 なお、言語は、JScript,VBScriptどちらでも構いません。 よろしくお願い致します。

  • DelphiでWebを使ったデータのやり取り

    私は、ソフトウェア開発歴20年を超える技術者ですが、Webを利用するプログラミング経験がありません。 ずっと、パッケージ関連の開発をしていたので、閉じた世界での開発は慣れていますが、外部とのやり取り経験がないので、どなたか教えてください。 開発言語はDelphi7です。 内容は、クライアントとホストのデータのやり取りです。 クライアントから入力されたログインIDとパスワードをホストへ送信して、OKなら順次やり取りを行なうものですが、最初のやり取りの方法がわかりません。 仕様書では、ホスト側の http://000.000.00.000/login.php(仮) に対して、ログインIDと、ログインID+パスワードをMD5暗号化したものを送って欲しいとありますが、実際のコーディングはどうなるのでしょうか? login_id=XXXXXX md5=MD5(login_id=XXXXXX&login_Pass=XXXX) また、ホストからの受け取るデータも、MD5暗号化されたものと、されないものが送られるので、暗号化されていないものを端末側でMD5暗号化して、暗号化されて送られたものと同じなら、正常に受信されたと判断して次の処理を行なうことになっています。 result=n(n=1:OK,0:NG) md5=MD5(n) 質問の書き方も的を得ていないかもしれませんが、実際のコーディング例で教えていただければ幸いです。 よろしくお願いします。

  • ログイン処理ができません。

    ただいまPHPを勉強している者です。 ログインしてマイページにとぶという事をやっているんですがうまくできません。 どなたかアドバイスいただけたらうれしいです。 *ソース* <?php //MySQLファイルのインクルード require_once("data/dbinfo.php"); session_start(); $_SESSION["my_no"]=0; $_SESSION["name"]=""; $_SESSION["mail"]=""; $error=""; $usr_mail =""; $usr_password=""; //POSTされた場合 if($_SERVER["REQUEST_METHOD"]=="POST"){ //ログインボタンが押された場合 if(isset($_POST["login"])){ //POSTされたデータを取得する //mail $usr_mail=htmlspecialchars($_POST["usr_mail"], ENT_QUOTES); //password $usr_password=htmlspecialchars($_POST["usr_password"], ENT_QUOTES); //入力内容をチェックする //mail if(strlen($usr_mail)==0){ $error="メールアドレスが入力されていません。"; } if(strlen($usr_password)==0){ $error="パスワードが入力されていません。"; } //エラーがなければ if(strlen($error)==0){ //registerテーブルをチェックする //registerのmailと入力usr_mailの一致を探す $mysql->query("SELECT * FROM register WHERE mail='$usr_mail'"); //行が存在した場合 if($mysql->rows()>0){ $row = $mysql->fetch(); //さらにパスワードの一致を確認 if($row["pass"] == $usr_password){ //セッションに格納する $_SESSION["my_no"]= $row["no"]; $_SESSION["name"]=$row["name"]; $_SESSION["mail"]=$usr_mail; //クッキーを保存 //mailを保存 setcookie("cooking[usr_mail]",$usr_mail); //passを保存 setcookie("cooking[usr_password]",$usr_password); //マイページへとぶ $login_url = "http://{$_SERVER["HTTP_HOST"]}/reservation/mypage.php"; header("Location: {$login_url}"); exit; } }else{//行が存在しない場合 $error = "メールアドレスかパスワードに誤りがあります"; } } } } ?> <html> <head></head> <body> <form action="<?=_SERVER["PHP_SELF"]?> method="post"> <td><b><i>*メールアドレス</i></b></td> <td><input type="text" name="usr_mail" value="<?=$usr_mail ?>" size=30></td> </tr> <tr> <td><b><i>*PASS</i></b></td> <td><input type="password" name="usr_password" value="<?=$usr_password ?>" maxlength="8"></td> </tr> </table><br> <input type="submit" name="login" value="ログイン"> </form> </body> </html> という感じなんですが・・・・

    • 締切済み
    • PHP
  • Windows XPでのtelnetサービスの設定について

    Windows XPにtelnetサービスがあります。現在その設定を行っているところです。 1.サービスの開始 2.Windowsファイアーウォールで23番ポートの開放 と進みました。 ここで別のXPマシンのコマンドプロンプトから、telnetの依頼を出しました。 すると、以下のような問いが帰ってきます。 パスワード情報をインターネットゾーンのリモートコンピュータに送信しようとしていますが、この操作は安全でない可能性があります。送信しますか?(Y/N) Yと入力すると、接続できないです。これは何を聞いていると理解したらよろしいでしょうか。 Nと入力したら、login, password画面となり、 Administrator格のユーザだったらログインできますがが、その他のユーザだったら、 Acess Denied: Specified user is not a member of TelnetClients group. Sever administrator must add this user to the above group. となり、接続できません。TelnetClients groupにそのユーザを指定するにはどうしたらよろしいでしょうか。通常は外部からの接続はAdministratorでないほうが普通だろうと思いますが。 Linuxだったら、デフォルトでもう少し簡単に接続できると思います。telnetdが起動しさせすれば、login, passwordは登録されているユーザのものを入力すればよいからです。Windowsの場合、telnetの設定で、ローカルシステムアカウント、アカウントの選択などがあり、どのように設定するべきなのか不明です。telnetでadmini以外の一般ユーザでログインするにはどうしたらよいでしょうか。 よろしくお願いします。

専門家に質問してみよう