我工作with a protocol,只需使用netcat即可轻松使用。该协议以登录消息开始,所以我想我可以敲出一个小脚本,它将stdin之前的登录消息传递给netcat给我。
我能够接近,但有一个问题我无法弄清楚。以下脚本有效,因为它发送登录消息并允许我与netcat进行交互。但是如果netcat退出(因为服务器端关闭了连接),脚本就会挂起(大概是因为cat
仍在读取stdin,即使没有人再读stdout)。
( echo "${LOGIN}"; cat ) | nc ${HOST} ${PORT}
答案 0 :(得分:1)
这是一个棘手的问题,你对事业是正确的。在实际尝试写入管道之前,进程不会收到NOPIPE错误和SIGPIPE。
如果不出意外,您可以使用互动脚本工具expect
:
expect <(echo '
spawn nc google.com 80
send "GET / HTTP/1.0\n"
send "Host: www.google.com\n"
interact
')
这将运行nc
,发送一些HTTP标头,然后为您提供控制权。当nc退出时,命令也会退出。