
我想知道是否有任何方法可以讓 telnet 只發送 a \n
,而不是\r\n
.
例如,如果一個進程正在偵聽這樣的端口,則列印收到的任何流量的位元組:
nc -l 1234 | xxd -c 1
使用 netcat 連接到它nc localhost 1234
,然後輸入“hi[enter]”:
0000000: 68 h
0000001: 69 i
0000002: 0a .
使用 telnet 連接到它telnet localhost 1234
,然後輸入“hi[enter]”
0000000: 68 h
0000001: 69 i
0000002: 0d .
0000003: 0a .
Telnet 正在發送 0x0d0a 而不是 0x0a 作為換行符。我知道這是一個 CRLF,而不是 LF。如果我使用^M
或,它也會發送 CRLF ^J
。
我以為我已經找到了一個透過使用 直接解決此問題的解決方案toggle crlf
,但即使設定了此選項,Telnet 始終會發送\r\n
.我還在各種 telnet 用戶端上嘗試過這個,所以我猜我誤解了切換應該做什麼。
有什麼方法可以透過 telnet 傳送\n
,使用 Enter 或其他方式嗎?
答案1
你可以協商二進位模式。一旦進入此模式,您就無法離開它。協商意味著telnet
客戶端將向伺服器發送一個特殊的位元組序列,如果您沒有實作該協議,則必須忽略該位元組序列。
後續資料以線路模式原封不動地發送。客戶:
$ telnet localhost 1234
Connected to localhost.
Escape character is '^]'.
^]
telnet> set binary
Negotiating binary mode with remote host.
hi
^]
telnet> quit
和伺服器
$ nc -l 1234 | xxd -c 1
00000000: ff .
00000001: fd .
00000002: 00 .
00000003: ff .
00000004: fb .
00000005: 00 .
00000006: 68 h
00000007: 69 i
00000008: 0a .
您的telnet
用戶端可能可以選擇以二進位模式啟動,或者您可以將條目放入~/.telnetrc
localhost
set binary
您可以在每個方向獨立應用二進位模式,因此您可能會更喜歡set outbinary
.
答案2
不在遠端登入,因為適用的 RFC 指定回車/換行作為行結束符號。看RFC 5198 中的附錄 C。