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