Linux下通信调试非常方便,系统提供了大量的网络调试工具,如 tcpdump,nc,lsof,netstat 可以快速调试tcp,udp服务。看到一篇文章shell 不借助上述工具,通过重定向也可实现通信,太神奇了。
Linux 下特殊文件,/dev/[tcp|udp/host/port , 只要读取该文件,系统会建立与host:port的socket连接,达到通信的目的,类似于命令 nc host port 。
[scada@linux ~]$ exec 8<> /dev/tcp/localhost/echo # exec连接echo服务,在/proc/self/fd显示连接 [scada@linux ~]$ ll /proc/self/fd 总用量 0 lrwx------. 1 scada scada 64 10月 11 09:52 0 -> /dev/pts/3 lrwx------. 1 scada scada 64 10月 11 09:52 1 -> /dev/pts/3 lrwx------. 1 scada scada 64 10月 11 09:52 2 -> /dev/pts/3 lr-x------. 1 scada scada 64 10月 11 09:52 3 -> /proc/34388/fd lrwx------. 1 scada scada 64 10月 11 09:52 8 -> socket:[294041] [scada@linux ~]$ exec 8>&- # close(8)
[scada@linux ~]$ cat 8<> /dev/tcp/localhost/echo # tcp方式连接系统echo服务(fd=8),然后可以收发信息。echo代表端口7,可通过查询: cat /etc/services | grep echo hello world hello world [scada@linux ~]$ ps -ef|grep cat # 查找cat pid scada 34277 34175 0 09:41 pts/3 00:00:00 cat scada 34310 34251 0 09:44 pts/4 00:00:00 grep cat [scada@linux ~]$ lsof -p 34277 # 查看cat资源使用情况 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cat 34322 scada 0u CHR 136,3 0t0 6 /dev/pts/3 cat 34322 scada 1u CHR 136,3 0t0 6 /dev/pts/3 cat 34322 scada 2u CHR 136,3 0t0 6 /dev/pts/3 cat 34322 scada 8u IPv4 293428 0t0 TCP linux.kettas:57967->linux.kettas:echo (ESTABLISHED) # 与xinetd建立tcp连接 [scada@linux ~]$ cat 8<> /dev/udp/localhost/echo # udp方式连接echo服务,nc -u localhost 7 hello world hello world [scada@linux sh]$ (echo -e "HEAD / HTTP/1.1\n\n\n\n\n";sleep 2)|telnet www.baidu.com 80 # telnet连接百度服务器,并请求服务器头信息 Trying 180.97.33.108... Connected to www.baidu.com. Escape character is '^]'. HTTP/1.1 302 Moved Temporarily Date: Sat, 11 Oct 2014 02:04:56 GMT Content-Type: text/html Content-Length: 215 Connection: Keep-Alive
原文: http://www.cnblogs.com/chengmo/archive/2010/10/22/1858302.html
所有评论(0)