有什么方法可以在 Telnet 中只发送“\n”?

she*_*lly 7 telnet netcat xxd nc

我不知道是否有什么办法让telnet来只发送\n,而不是一个\r\n

例如,如果一个进程正在侦听这样的端口,则打印接收到的任何流量的字节:

nc -l 1234 |  xxd -c 1 
Run Code Online (Sandbox Code Playgroud)

从 netcat 连接到它nc localhost 1234,然后输入“hi[enter]”:

0000000: 68  h
0000001: 69  i
0000002: 0a  .
Run Code Online (Sandbox Code Playgroud)

从 telnet 连接到它telnet localhost 1234,然后输入“hi[enter]”

0000000: 68  h
0000001: 69  i
0000002: 0d  .
0000003: 0a  .
Run Code Online (Sandbox Code Playgroud)

Telnet 为换行符发送 0x0d0a 而不是 0x0a。我知道这是一个 CRLF,而不是 LF。如果我使用^M或 ,它也会发送 CRLF ^J

我以为我找到了一个直接解决这个问题的解决方案,通过使用toggle crlf,但即使设置了这个选项,Telnet 总是发送\r\n. 我也在各种 telnet 客户端上尝试过这个,所以我猜我误解了切换应该做什么。

有什么方法可以\n通过 telnet发送,输入或其他方式?

meu*_*euh 14

您可以协商二进制模式。一旦进入这种模式,你就不能离开它。协商意味着telnet客户端将向服务器发送一个特殊的字节序列,如果您没有实现协议,您将不得不忽略它。

后续数据在线路模式下不变地发送。客户:

$ telnet localhost 1234
Connected to localhost.
Escape character is '^]'.
^]
telnet> set binary
Negotiating binary mode with remote host.
hi
  ^]
telnet> quit
Run Code Online (Sandbox Code Playgroud)

和服务器

$ 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  .
Run Code Online (Sandbox Code Playgroud)

您的telnet客户可以选择以二进制模式开始,或者您可以在~/.telnetrc

localhost
 set binary
Run Code Online (Sandbox Code Playgroud)

您可以在每个方向上独立应用二进制模式,因此您可能更喜欢set outbinary.