1

使用的协议很容易与netcat一起使用。该协议以登录消息开始,所以我想我可以编写一个小脚本,将标准输入之前的登录消息通过管道传输到我的 netcat。

我能够接近,但有一个问题我无法弄清楚。以下脚本有效,因为它发送登录消息并允许我与 netcat 交互。但是如果 netcat 退出(因为服务器端关闭了连接),脚本就会挂在那里(可能是因为cat即使没有人再读取 stdout,它仍在读取 stdin)。

( echo "${LOGIN}"; cat ) | nc ${HOST} ${PORT}
4

1 回答 1

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 退出时,命令也会退出。

于 2013-02-15T17:21:11.267 回答