有什么方法可以在 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

相关内容