Bash Shell 下打开一个TCP / UDP SOCKET

时间:2024-11-01 14:10:58

1、在Bash Shell中打开或关闭TCP / UDP套接字简而言之,您可以使用bashshell中的以下语法打开TCP / UDP套接字。$ exec {file-descriptor} </ dev / {protocol} / {host} / {port}“文件描述符”是与每个套接字相关联的唯一的非负整数。文件描述符0,1和2分别保留给stdin,stdout和stderr。因此,您必须指定3或更高(以未使用者为准)作为文件描述符。“<>”意味着套接字对于读写都是打开的。根据您的需要,您可以打开只读(<)或只写(>)的套接字。“协议”字段可以是tcp或udp。“主机”和“端口”字段是不言自明的。例如,要打开xmodulo.com的双向TCP套接字,使用HTTP端口和文件描述符3:$ exec 3 <> / dev / tcp / xmodulo.com / 80打开后,可以使用以下语法关闭读/写套接字。第一个命令关闭输入连接,后者关闭输出连接。$ exec {file-descriptor} <& - $ exec {file-descriptor}>& -

2、在Bash Shell中读取或写入TCP / UDP套接字打开套接字后,您可以向套接字写入消息或从套接字读取消息。要将存储在$ MESSSAGE中的消息写入套接字:$ echo -ne $ MESSAGE>&3$ printf $ MESSAGE>&3要从套接字读取消息并将其存储在$ MESSAGE中:$ read -r -u -n $ MESSAGE <&3$ MESSAGE = $(dd bs = $ NUM_BYTES count = $ COUNT <&3 2> / dev / null)

3、Bash Shell中的TCP / UDP套接字示例这里我介绍几个打开和使用TCP套接字的shell脚本示例。(1)获取远程网页并打印其内容#!/bin/bashexec 3<>/dev/tcp/xmodulo.com/80echo -e "GET / HTTP/1.1\r\nhost: xmodulo.com\r\nConnection: close\r\n\r\n" >&3cat <&3(2)显示远程SSH服务器版本#!/bin/bashexec 3</dev/tcp/192.168.0.10/22timeout 1 cat <&3(3)从nist.gov显示当前时间#!/bin/bashcat </dev/tcp/time.nist.gov/13(4)检查Internet连接#!/bin/bashHOST=www.mit.eduPORT=80(echo >/dev/tcp/${HOST}/${PORT}) &>/dev/nullif [ $? -eq 0 ]; then echo "Connection successful"else echo "Connection unsuccessful"fi(5)对远程主机执行TCP端口扫描#!/bin/bashhost=$1port_first=1port_last=65535for ((port=$port_first; port<=$port_last; port++))do (echo >/dev/tcp/$host/$port) >/dev/null 2>&1 && echo "$port open"done

4、注意事项在bash中打开一个socket需要bashshell启用net-redirections(即使用“--enable-net-redirections”编译)。旧发行版可能禁用了bash的功能,在这种情况下,您将遇到以下错误:/dev/tcp/xmodulo.com/80: No such file or directory除了bash之外,已知可以在其他shell(如ksh或zsh)中使用套接字支持。

© 手抄报圈