我正在寻找一个简单的bash命令来打开客户端套接字,从套接字读取所有内容,然后关闭套接字。像插座的wget或curl之类的东西。
Bash中是否有命令执行此操作?我需要编写一个bash脚本吗?
答案 0 :(得分:7)
Netcat是通常用于执行此操作的工具,但也可以使用/dev/tcp
and /dev/udp
special pathnames完成。
答案 1 :(得分:3)
使用nc。它快速简便。要在端口999上连接到客户端192.168.0.2,请向其发送资源请求,并将该资源保存到磁盘,请执行以下操作:
echo "GET /files/a_file.mp3 HTTP/1.0" | nc -w 5 192.168.0.2 999 > /tmp/the_file.mp3
切换-w 5
表示nc将等待最多5秒钟的响应。当nc完成下载后,套接字将关闭。
如果要发送更复杂的请求,可以使用gedit或其他文本编辑器编写它,将其保存到文件“reqest”,然后通过管道将该文件捕获到nc:
cat request.txt | nc -w 5 192.168.0.2 999 > /tmp/the_file.mp3
您不需要为此编写脚本,因为它是一行命令......但如果您经常使用它,那么编写脚本是必须的!
希望我能帮到你。 :)答案 2 :(得分:1)
已经提到的 netcat (nc
)简单而强大。但是,如果您需要更强大的工具:socat。
答案 3 :(得分:0)
我有一个简单的例子,我需要从一个套接字读取数据,这个套接字可能有也可能没有数据,但没有 EOF,因为设备没有运行网络服务器。
exec 3<>/dev/tcp/192.168.1.10/5000
echo -n -e '\xAA\xBB\x03\x10\x00\xEE' >&3
timeout 3 cat <&3 | od -x
Timeout 以秒为单位接受一个参数,因此它会读取套接字上的任何数据,或者在 3 秒后停止读取,这非常适合我的用例,因为套接字中通常唯一的数据是响应到之前的请求。