bash命令从网络套接字读取?

时间:2010-11-26 07:17:02

标签: bash

我正在寻找一个简单的bash命令来打开客户端套接字,从套接字读取所有内容,然后关闭套接字。像插座的wget或curl之类的东西。

Bash中是否有命令执行此操作?我需要编写一个bash脚本吗?

4 个答案:

答案 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 秒后停止读取,这非常适合我的用例,因为套接字中通常唯一的数据是响应到之前的请求。