BusyBox下如何使用NC命令等待socket入站端的响应?

big*_*osh 3 linux busybox netcat

我在使用 BusyBox 1.1.3 附带的 Netcat 发出 HTTP 请求然后接收响应时遇到问题。NC 命令似乎在到达我发送的请求文件末尾时立即退出。-w 选项似乎是为这种情况设计的,但是查看源代码,-w 选项似乎不可能对接收行为产生任何影响。

BusyBox 上此版本 NC 的源代码在这里...

http://git.busybox.net/busybox/tree/networking/nc.c?id=5cbe2519d8776bc15e0bc4dc7aeb6adc53e50b81

我究竟做错了什么?有没有办法通过这个版本的 NC 将文件发送到服务器,然后等待接收响应?关于在脚本中执行此操作的其他可能方法的任何创意?

请注意,这是一个嵌入式系统,我无法升级 BusyBox 版本或上传新的​​可执行文件 - 我只能使用脚本文件和已经可用的 BusyBox 可执行文件。另请注意,系统上没有可用的 WGET。

谢谢!

-乔希

小智 5

尝试这个:

(echo "GET / HTTP/1.0"; sleep 1) | nc HOST 80
Run Code Online (Sandbox Code Playgroud)

  • 为了避免使用子 shell,您可以执行 `{ ...; }` 代替 `(...)`。请注意,大括号之前/之后需要空格,最后一个命令之后需要尾随分号。 (2认同)

Mar*_*iae 1

你确定你没有对nc感到困惑吗?BusyBox手册页指出:

nc
nc [OPTIONS] HOST PORT - connect nc [OPTIONS] -l -p PORT [HOST] [PORT] - listen

Options:

    -e PROG         Run PROG after connect (must be last)
    -l              Listen mode, for inbound connects
    -n              Don't do DNS resolution
    -s ADDR         Local address
    -p PORT         Local port
    -u              UDP mode
    -v              Verbose
    -w SEC          Timeout for connects and final net reads
    -i SEC          Delay interval for lines sent
    -o FILE         Hex dump traffic
    -z              Zero-I/O mode (scanning)
Run Code Online (Sandbox Code Playgroud)

因此,监听端口的选项似乎是(传统的) -l,而-w是连接和最终网络读取的超时。

如果您的问题是即使在连接关闭后仍要继续监听,您可以使用永恒循环,而 true nc -l ...

编辑:

读完这些消息后,我意识到我不明白OP在问什么。我不明白的原因是你不能使用nc实例来发送接收。您需要一个单独的端口,以及一个单独的nc实例。如果无法在同一端口上接收数据,则保持nc传输实例处于打开状态是没有意义的。