有什麼方法可以在 Telnet 中只發送“\n”嗎?

有什麼方法可以在 Telnet 中只發送“\n”嗎?

我想知道是否有任何方法可以讓 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

相關內容