- 论坛徽章:
- 0
|
原帖由 一梦如是 于 2007-1-28 10:04 发表
对lovesaka兄的话有些疑问
- mknod /dev/[tcp|udp] c [主设备号] [从设备号]
复制代码
它的用意是什么?重定向/dev/[tcp|udp]/host/port只是shell建立socket的一种方法,而/dev/[tcp|udp]/host/port此设备 ...
If bash was compiled with --enable-net-redirections, it has the capability of
using a special character device for both TCP and UDP redirections. These
redirections are used identically as STDIN/STDOUT/STDERR. The device entries
are 30,36 for /dev/tcp
这句话是在abs上看到bash在2.0或者更2.0以前是要加上--enable-net-xxxx选项编译才会支持连接socket的功能它会在/dev下建立相应的字符设备目的是为了像标准输入标,准输出,错误一样可以有重定向功能
我自己也试了试发现并不像abs所说的那样其实/dev/tcp/host/port只是bash命令行获取连接的套接口类型主机端口号的信息一种型式而已
而建字符设备的确是多余的这是在高版本里,而老版本bash呢这我一无所知
我认为在循环里关闭描述符原因是如果bash是在创建子进程前打开的描述符那么子进程结束过后连接仍然没有关闭只有在bash收割子进程时或者子进程或bash显示用shutdown这条连接才会完全关闭如果是在创建子进程之后打开的把关闭描符也不会有什么问题
但是如果放在外面的话那第一种情况就会出现大量未关闭连接直到bash收割子进程时才关闭(如果是在第二程情况那就不存在,还有在被扫描主机端口很少时很难看出这种差别我想的也不一定是正确如果有错还请指出)
用watch -n1 lsof -i 4 -a -n -P -u UID或者tcpdump -n -v tcp 还有watch -n1 netstat -taun可以看看
( exec 3</dev/tcp/localhost/$i ) 2>/dev/null
不错想半天没想出招来学习了^_^ |
|