[問題] telnet客端送出指令與伺服端動作

看板Linux作者 (幼斤)時間10年前 (2015/10/14 01:57), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/2 (看更多)
當你使用ptt bbs telnet客端軟體連到ptt伺服器時, 隨便按下任一按鍵,會發生什麼事?會不會遇到超乎預期的反應? 這是有可能的,因為: 1.不同客端軟體相同按鍵送出代碼不一定一樣, 2.不同伺服端對相同代碼反應動作不一定一樣, ** 1.telnet客端軟體有很多種,例如windows內建的telnet.exe, pcman,kkman,firefox的附加元件'BBSFox'等, 基本上大同小異,以下按鍵每個軟體送出代碼應該都一樣,例如: U 0x55 u 0x75 esc 0x1b tab 0x09 backspace 0x08 以上代碼都與ascii-code表一致, 那如果按 ctrl+a 等會送出什麼代碼?答案如下 ctrl+h 0x08 ctrl+i 0x09 ctrl+u 0x15 ctrl+l 0x0c ctrl+k 0x0b ctrl+e 0x05 ctrl+d 0x04 ctrl+a 0x01 以上就無法從ascii-code表查出, 另外像是home end 方向鍵送出的代碼就不只1byte,而是3-4 bytes,如下 home 1B 5B 31 7E end 1B 5B 34 7E up 1B 5B 41 down 1B 5B 42 right 1B 5B 43 left 1B 5B 44 以上所說按鍵代碼,無論用kkman pcman telnet.exe送出應該都一樣, 但還是有小差異,例如telnet.exe按'DELETE'鍵送出1bytes的代碼 0x7f 而firefox的附加元件'BBSFox'按'DELETE'鍵送出4bytes的代碼 1B 5B 33 7E 如何得知按鍵送出的代碼?可以用以下軟體SmartSniff監視連線封包就知道, http://www.nirsoft.net/utils/smsniff.html ** 2.當你按下 ctrl+u 應該會送出1byte大小的代碼 0x15 , 那伺服器端收到代碼 0x15 會做什麼事? 一般而言,在命令列模式下,ctrl+u (0x15)會將游標左側那一行清除, 但這不是絕對的,因為伺服端有不同版本linux,不同shell環境, 而且也應該可以更改ctrl+u做其他事, 我的問題:目前我登入的telnet伺服端是linux bash shell環境, bash shell會在命令列執行delete動作:(將游標所在或右側刪去一個字元) 但是只接受ctrl+d(0x04) 或 (1B 5B 33 7E)兩個代碼才會精準執行delete動作, 也就是說把游標移到想刪除的字元,可以按ctrl+d刪除,也可慢慢打四個按鍵, ESC [ 3 ~ (1B 5B 33 7E),來刪除字元。 請問這個要從哪裡改?改成其他代碼也可執行delete動作? stty erase ^H 等等試過了,沒有改變,沒有用, 應該有個鍵盤設定檔可以改?請問在哪裡? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.61.219.121 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1444759025.A.35F.html

10/14 08:22, , 1F
pietty 之類軟體會有個選項可以改鍵盤模式
10/14 08:22, 1F

10/14 08:22, , 2F
模擬 ascii 127 / vt220 模式,就會影響 delete 鍵
10/14 08:22, 2F

10/14 08:22, , 3F
所送出的字元代碼
10/14 08:22, 3F

10/14 08:38, , 4F
我比較想從伺服端去改 從bash shell環境去改
10/14 08:38, 4F
文章代碼(AID): #1M7KNnDV (Linux)
文章代碼(AID): #1M7KNnDV (Linux)