分类: LINUX
2010-03-05 10:21:52
man bash
详见REDIRECTION一节
在用于重定向时,Bash有几个特定的文件名有特定的用途,(事实上这个文件名在文件系统中可能并不存在),例如:
/dev/tcp/$host/$port
host: 可以取值为有效的主机域名或IP地址
port: 可以取值为有效的端口号或服务名(在/etc/services中定义)
bash会尝试建立一个与远程TCP套接字相连接的TCP套接字。
例1:
echo $?
成功则返回0
可以用于检测远程套接字是否存在。
例2:
exec 8<>/dev/tcp/192.168.0.1/80
将与192.168.0.1:80建立连接,并打开一个文件描述符“8”
我们在交互模式下执行上面的命令成功打开一个套接字后,
执行
ls -l /proc/self/fd
将会有类似下面的输出:
lrwx------ 1 zy zy 64 Oct 23 19:54 /proc/self/fd/8 -> socket:[175669194]
可以看见Bash已经成功创建该套接字(或者使用 netstat -npt|grep "$$" )
接下来我们向我们打开的套接字发送一个HEAD请求,并显示它:
echo -e "HEAD / HTTP/1.0\n\n" >&8
cat <&8
输出类似如下:
HTTP/1.1 200 OK
Date: Thu, 23 Oct 2008 12:09:23 GMT
Server: Apache/1.3.41 (Unix) mod_gzip/1.3.26.1a PHP/5.2.5
Last-Modified: Wed, 17 Sep 2008 11:51:45 GMT
ETag: "239fe0-597-48d0ef51"
Accept-Ranges: bytes
Content-Length: 1431
Connection: close
Content-Type: text/html
至此,我们已经达到进行简单套接字通信的目的。
删除套接字:
exec 8<&-