none
如何從用主控台應用程式登入telnet並執行指令 RRS feed

  • 問題

  • 如題,
    我想自動執行類似以下命令
    -----------
    telnet 192.168.0.1
    username
    password
    ..
    這裡執行命令
    ..
    quit
    -----------
    可以在命令列(cmd)下直接貼上執行成功
    所以就想寫成Process+bat來跑它
    ProcessStartInfo PrcStartInfo = new ProcessStartInfo("telnet.bat");
    Process CMD = new Process();
    CMD.StartInfo = PrcStartInfo;
    CMD.Start();

    一執行發現指令都會停在
    telnet 192.168.0.1之後的詢問username的地方
    也就是只會RUN到批次檔裏的第一行
    有點像是跟telnet主機的應答沒一行行對應上

    請教一下有其他的方式可以解決嗎?
    謝謝~
    永遠的初學者
    • 已編輯 保持初心 2009年4月8日 上午 10:49 敘述錯誤
    2009年4月8日 上午 07:17

所有回覆

  • 初心:
            用 TcpClient 類別與Stream類別自己寫個Telnet.
            以下的MSDN參考文件有範例可供參考
            [TcpClient 類別]
            [Stream 類別]
            
            希望對你有幫助
    2009年4月9日 上午 09:20
    版主
  • Thanks Bill~

    有試過這樣做
    不過使用這個方法的話

    1.丟出去的命令
    2.接回來的結果
    兩者個訊息格式該怎麼做轉碼 這一段我就不會了
    想是還有一些功課要作

    我現在在TRY的方法是
    1.去Call 一個bat 執行cscript //nologo
    2.run 一個telnet.vb 配合WScript.Shell的SendKeys指令來作
    這樣可以WORK

    不過這個方法有一個缺陷
    就是如果剛好有其他程式執行使程式的焦點改變
    SendKeys指令就會失敗
    不知道有沒有辦法可以避免?

    永遠的初學者
    2009年4月13日 上午 09:43
  • Sorry,隔了這麼久才來回報測試狀況

    原先我一直以為我試的幾個方法有問題
    回傳值都是亂碼(我想可能是控制碼).用了幾種編碼都解不出來
    後來改連一個BBS(iie.twbbs.org)後發現其實回傳值正常,登入訊息都能抓得到

    我要telnet的對象是一個硬體防火牆
    以下是擷取了連線過程的封包
    ------------------------------------
    1.DOS Ccommand下
    C:\Telnet 192.168.0.254  [Enter]後
    Get =>..... ..#..' 
    Send=>........ ..#..'
    Get =>...
    Send=>....P....
    Get =>..'.........
    Send=>..'.......ANSI..
    Get =>...........!
    Send=>...........!
    Get =>......
    Send=>...
    Get =>FGT100A login: //防火牆登入提示,[Enter]後就直接到這

    -----------------------------------
    2.用程式連Telnet [IP address]時
    連線後取得第一個訊息
    Get =>..... ..#..' //我的程式就只取到這,就是我一直取到亂碼的部分

    之後就一直沒回應 沒辦法到防火牆登入提示

    有人有類似的經驗能分享嗎?
    謝謝~


    永遠的初學者
    • 已編輯 保持初心 2009年4月21日 上午 05:42 要更詳細敘述
    2009年4月21日 上午 05:30
  • 依據 RFC 標準換行指令是 CrLf ,但是很多 linux base 的系統只有 Lf ,所以先改用 Byte() 來分析傳回來的是啥~

    最好是有該硬體的白皮書比較準。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年4月21日 上午 07:01
  • 我是有接回Byte()資料
    可是不知該用什麼碼來解它

    我用了
    System.Text.Encoding.GetEncoding(CodeNum).GetString(receiveByteData , 0 , len)
    CodeNum用0~3000下去跑
    取出有效的轉出值....
    不過沒有一個看的懂~
    應改用其他方法轉嗎?

    謝謝~

    37:ŸÙŸÙ€ŸÙƒŸÙ
    437: ² ²  ²# ²'
    500:ŸÙŸÙ€ŸÙƒŸÙ
    708: £ £  £# £'
    720: ² ²  ²# ²'
    737: ² ²  ²# ²'
    775: ² ²  ²# ²'
    850: ² ²  ²# ²'
    852: ř ř  ř# ř'
    855: § §  §# §'
    857: ² ²  ²# ²'
    858: ² ²  ²# ²'
    860: ² ²  ²# ²'
    861: ² ²  ²# ²'
    862: ² ²  ²# ²'
    863: ² ²  ²# ²'
    864:ﻱﻱ ﻱ#ﻱ'
    865: ² ²  ²# ²'
    866: ¤ ¤  ¤# ¤'
    869: ώ ώ  ώ# ώ'
    870:ŸŤŸŤ€ŸŤƒŸŤ
    874: #'
    875:Ÿ?Ÿ?€Ÿ?ƒŸ?
    932: #'
    936:????
    949:????
    950:????
    1026:ŸÙŸÙ€ŸÙƒŸÙ
    1047:ŸÙŸÙ€ŸÙƒŸÙ
    1140:ŸÙŸÙ€ŸÙƒŸÙ
    1141:ŸÙŸÙ€ŸÙƒŸÙ
    1142:ŸÙŸÙ€ŸÙƒŸÙ
    1143:ŸÙŸÙ€ŸÙƒŸÙ
    1144:ŸÙŸÙ€ŸÙƒŸÙ
    1145:ŸÙŸÙ€ŸÙƒŸÙ
    1146:ŸÙŸÙ€ŸÙƒŸÙ
    1147:ŸÙŸÙ€ŸÙƒŸÙ
    1148:ŸÙŸÙ€ŸÙƒŸÙ
    1149:ŸÙŸÙ€ŸÙƒŸÙ
    1200:﷿8⃽﷿C⟽
    1201:�᣿ﴠ�⏿ﴧ
    1250:˙ý˙ý ˙ý#˙ý'
    1251:яэяэ яэ#яэ'
    1252:ÿýÿý ÿý#ÿý'
    1253:ύύ ύ#ύ'
    1254:ÿıÿı ÿı#ÿı'
    1255:‎‎ ‎#‎'
    1256:ے‎ے‎ ے‎#ے‎'
    1257:˙ż˙ż ˙ż#˙ż'
    1258:ÿưÿư ÿư#ÿư'
    1361: #'


    永遠的初學者
    2009年4月21日 上午 10:44
  • ...

    一般正常人會先轉成 16 進位值,避免有不可見字元。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年4月21日 下午 02:46