用于向netcat发送标头的脚本

时间:2013-02-15 16:54:07

标签: bash

我工作with a protocol,只需使用netcat即可轻松使用。该协议以登录消息开始,所以我想我可以敲出一个小脚本,它将stdin之前的登录消息传递给netcat给我。

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

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

1 个答案:

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