在redhat上使用bash shell直接进行网络通信编程不是什么新鲜事情,但是我们不经常这样做,而且大多数的bash shell教程也没有讲太多这方面的内容。 在大多数时间里,选择调用更容易和更快捷的命令:netcat、mutt、curl或者wget等,而不是使用built-ins的socket编程。但是在一些极少case情况下,用户的运行机器没有安装这些工具或者用户为了安全考虑根本不会运行安装多余的软件,如果去获得批准安装这些工具是意见及繁琐的事情时,不得不考虑使用built-ins的socket编程。
1. Bash's Built-in /dev/tcp File (TCP/IP)
Bash shell使用built-ins的socket编程:在用于重定向时,Bash有几个特定的文件名有特定的用途/dev/tcp/$host/$port:
开启一个TCP的socket连接 和
/dev/udp/$host/$port:
开启一个UDP的socket连接。
- host: 可以取值为有效的主机域名或IP地址
- port: 可以取值为有效的端口号或服务名(在/etc/services中定义)
在linux系统上使用命令:man bash,然后查找TCP关键字,可以快速查找到下面的内容:
/dev/tcp/host/port
If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a TCP connection to the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a UDP connection to the corresponding socket.
注意:
Ping : ping没有端口port这个参数。
telnet:使用telnet来探测指定ip是否开放端口:telnet ip地址 端口。
ping是用来检测到目标主机是否正常连通的,用的是ICMP协议,三层协议,没有ping端口的说法。
端口是TCP或UDP的内容,是四层协议。
2. Bash socket programming with /dev/tcp
The following script fetches the front page from Google:
#exec 3<>/dev/tcp/www.google.com/80
#echo -e "GET / HTTP/1.1\r\nhost: http://www.google.com\r\nConnection: close\r\n\r\n" >&3
#cat <&3
第一行:exec 3<> 告诉bash打开一个文件描述符“3” (不能是0,1,2的任意数量),并通过文件描述符“3”来读取和写入数据到“伪设备”/dev/tcp/www.google.com/80(如果您在/dev目录运行ls命令,你会发现实际并不存在)。 第一行就是在80端口上建立一个与
www.google.com
的
TCP连接。
尽管
/
dev/tcp/www.google.com/80
不存在
的
事实
,
你会发现
有
一个新
创建的文件
位于
/
dev/fd/5:a symbolic link to something along the lines of “socket:[<some number>]”。
第二行: 向打开的socket写入数据,使用GET方式发送一个HTTP request到google主页
第三行: 从打开的socket读取数据,读取google主页发送回来的HTTP response应答,并输出到控台。
控制台的输出结果:
HTTP/1.1 302 Found
Location: http://www.google.ca/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=c0937b14e3b5e4a2:FF=0:TM=1304375672:LM=1304375672:S=qvrh_IjuRcStbI-i; expires=Wed, 01-May-2013 22:34:32 GMT; path=/; domain=.google.com
Date: Mon, 02 May 2011 22:34:32 GMT
Server: gws
Content-Length: 218
X-XSS-Protection: 1; mode=block
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.ca/">here</A>.
</BODY></HTML>
HTTP response输出结构:状态行、响应头response headers、空行、响应数据,请参考HTTP协议。
参考文章:
Using BASH for network socket operation
分享到:
相关推荐
bash shell高级编程
Bash shell编程参考手册,Linux编程必备。
毫无疑问,UNIX/Linux 最重要的软件之一就是shell,目前最流行的shell 被称为Bash(Bourne AgainShell),几乎所有的Linux 和绝大部分的UNIX 都可以使用Bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX 工作...
bash shell 中英文版本
运维 Bash Shell 脚本编程及系统大规模自动化运维教程合集.zip
鸟哥的BASH Shell编程手册
bash shell 的基础语法介绍。 1.bash的环境配置和配置文件介绍 2.bash的通配符,参数,变量,表达式,函数,正则表达式
运维 - Bash Shell 脚本编程及系统大规模自动化运维教程合集.zip
高级bash shell编程 比较厚,内容含盖的比较多,作为参考资料吧
Bash Shell 编程高级教程 (中文版)
Bash Shell编程
1. 文档全面的讲述了 bash shell编程知识,并且用很好的用例; 2. 高清、自带阅读目录,方便大家阅读; 3. shell脚本编程的经典书籍,需要的,自己来取;
Shells编程快速入门(四)之Bash Shell.pdfShells编程快速入门(四)之Bash Shell.pdfShells编程快速入门(四)之Bash Shell.pdfShells编程快速入门(四)之Bash Shell.pdfShells编程快速入门(四)之Bash Shell.pdfShells编程...
本书介绍shell脚本编程,主要针对Bourne shell与POSIX兼容的shell,但也广泛涵盖了新近的一些发展情况,尤其是bash shell。bash shell几乎总是会包含在GNU/Linux操作系统中,也包含在了大多数商业Unix中。另外,...
《Learning the bash Shell,3rd Edition,by Cameron Newham》, bash 的权威指南,本书中文版本下载地址:http://download.csdn.net/source/2244004。内容预览: Chapter 1. bash Basics Chapter 2. Command-Line ...
毫无疑问, UNIX/Linux最重要的软件之一就是shell, 目前最流行的shell被称为Bash(Bourne Again Shell), 几乎所有的 Linux和绝大部分的 UNIX 都可以使用 Bash。 作为系统与用户之间的交互接口, shell 几乎是你在 ...
高级bash shell手册 我见过的最好的bash shell 编程手册 推荐!
Learning the bash Shell Unix SHell Programming 第三版 非扫描高清版 带完整书签 学习Bash编程的最佳法宝
linux BASH shell脚本编程指南
高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程! 高级linux bash shell 编程!