在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高级编程的重要知识点: 1. **命令别名**:可以通过定义别名来简化常用命令,如`alias ll='ls -l'`,...
《Bash shell编程参考手册》是一份详尽的文档,主要介绍了Bash shell的各种功能与用法,是Linux系统编程的必备指南。这份手册由Chet Ramey(凯斯西储大学)和Brian Fox(自由软件基金会)共同编写,针对的是Bash版本...
《Shell高级编程》是一本深入探讨Unix/...结合文档与源码,不仅可以深入理论,更能通过实践巩固知识,让你在Shell编程的道路上更进一步。无论是解决日常问题,还是进行复杂的系统集成,这个资源包都将是你得力的助手。
### bash shell 基础编程语法 #### 一、bash shell 概述 **Shell**是一种用户与操作系统之间交互的接口。在用户登录系统后,`init`进程会为每位用户运行一个称为“shell”的程序。Linux下的shell并非只有单一形式...
毫无疑问,UNIX/Linux 最重要的软件之一就是shell,目前最流行的shell 被称为Bash(Bourne AgainShell),几乎所有的Linux 和绝大部分的UNIX 都可以使用Bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX 工作...
作为一本介绍 Bash Shell 编程的经典教程,《学习 Bash Shell》已经经过多次修订和完善,目前推出的第三版更是集多年教学和实践经验之大成。 #### 描述分析 - **简要介绍**:这是一本简单易懂、便于快速上手的学习...
《学习Bash Shell》 Bash Shell是Unix和Linux操作系统中最常用的一种命令行解释器,全称为Bourne-Again SHell,它是GNU项目的一部分,由自由软件基金会维护。掌握Bash Shell对于提升Linux操作效率、编写自动化脚本...
在IT行业中,Bash Shell脚本编程是系统管理员和运维工程师不可或缺的技能,尤其是在进行大规模自动化运维时。这个“运维 - Bash Shell 脚本编程及系统大规模自动化运维教程合集.zip”包含了丰富的学习资源,旨在帮助...
bash shell 中英文版本
通过以上对标题、描述和部分内容的分析,我们可以看出《Linux Shell Scripting with Bash》这本书是一本非常全面且实用的学习资源,对于希望深入了解Bash Shell编程的读者来说具有极高的价值。无论是作为入门教材...
在IT行业中,Bash Shell脚本编程是一种极为重要的技能,特别是在系统运维领域。Bash(Bourne-Again SHell)是Unix/Linux操作系统中的默认shell,它提供了与系统交互、执行命令以及自动化任务的能力。本教程合集针对...
它基于原始的Shell编程语言,由Steve Bourne开发,而Bash则是其增强版,由GNU项目维护。这份"Advanced Bash Shell Guide"旨在帮助用户深入理解并充分利用Bash Shell的功能,提高在命令行环境下的工作效率。 在Unix...
**鸟哥的BASH Shell编程手册**是一本专为Linux用户设计的编程教程,主要涵盖了BASH Shell脚本的编写与应用。BASH(Bourne-Again SHell)是GNU项目下的一个Unix/Linux系统默认的命令解释器,它继承了Unix传统的Shells...
"高级Bash Shell编程书(ABS)"是一个专门为想要深入理解和掌握Bash Shell编程技术的人准备的资源。这本书,无论是英文版的PDF还是中文版的HTML,都包含了丰富的知识,旨在帮助读者从入门到精通Bash Shell脚本编写。...
Linux Bash Shell 中文...这个手册通过这些章节全面地介绍了Bash Shell的各个方面,对于学习和掌握Bash编程和Linux系统管理至关重要。无论是新手还是经验丰富的用户,都能从中找到解决问题的线索和优化工作效率的方法。
高级bash shell编程 比较厚,内容含盖的比较多,作为参考资料吧