linux中有一个特殊的文件/dev/tcp,打开这个文件就类似于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

  1. 打开/dev/tcp
    以读写方式打开/dev/tcp,并指定服务器名为: www.csdn.net,端口号为:80,指定描述符为8
    1
    exec 8<>/dev/tcp/www.csdn.net/80

命令解读:

1
2
3
4
5
6
7

> 注意:/dev/tcp本身是不存在的,无法在/dev下看到这个设备节点。

- 实际上,这个设备节点不存在于系统中,在bash中通过打开```/dev/tcp```来取得socket的功能实际上是bash的特性,并不是系统的功能。

2. 向文件中写入数据
向文件中随便写一些数据: echo -e "GET">&8

echo -e “GET”>&FD

解析:echo -e是以某种格式发出去(忘了-e是代表二进制还是ASCII了);```>&```表示流的流向,表示向哪个fd写入,其中```&```的作用是区分```>```的大于号意义,>比较大小而```>&```表示流的定向。

3. 读文件
读取返回的信息:cat<&8;如果HTTP请求被回应,这个时候应该能够读出一点```<html>xxxx</html>```出来。

- Attention
有些版本的bash可能默认不支持对```/dev/tcp```的打开。此时可以在编译bash的时候增加一个参数:```--enable-net-redirections```然后重新编译bash即可。