有人知道如何获得与该设备的交互式会话吗/dev/tcp/hostname/80
?
我打开cat <> /dev/tcp/www.google.com/80
并尝试输入“GET / HTTP/1.0\nHost: www.google.com\n”,但是没有反应。
以下操作有效,但会话是非交互式的:
{ echo -e "GET / HTTP/1.0\r\nHost: www.google.com\r\n\r" >&3; cat <&3 ; } 3<> /dev/tcp/www.google.com/80
答案1
Sole<>
相当于0<>
。执行 时cat <> /dev/tcp/…
, 的 stdincat
被重定向。cat
不会从终端读取。您输入的内容不会传到任何地方。
据称有效的命令
{ echo -e "GET / HTTP/1.0\r\nHost: www.google.com\r\n\r" >&3; cat <&3 ; } 3<> /dev/tcp/www.google.com/80
将 的输出发送echo
到连接,并将响应发送到cat
。同样,没有任何东西可以读取您(将要)输入的内容。
重要的是cat
它是单向的。要进行交互式通信,cat
每个方向都需要一个:
{ cat <&3 &
cat >&3
} 3<> /dev/tcp/www.google.com/80
第一个cat
(在后台)从连接读取并写入终端(屏幕)。第二个cat
从终端读取(您输入的内容)并打印到连接。
当连接终止时,cat
后台会自动退出;无需明确终止它。
nc
只需调用一次即可完成以下任务:
nc www.google.com 80
默认情况下,nc
从 stdin 读取的内容会发送到连接,响应会发送到 stdout。