【Shell】通过shell脚本调用tcp/udp socket

bash shell 的内置功能之一是通过/dev/tcp和/dev/udp设备文件打开TCP / UDP套接字。
以下介绍如何在shell中使用tcp/udp socket

  • 在Bash Shell中打开或关闭TCP / UDP套接字

语法:
     

$ exec {file-descriptor} </ dev / {protocol} / {host} / {port}

file-descriptor:
    与每个套接字相关联的唯一的非负整数。
    文件描述符0,1和2分别保留给stdin,stdout和stderr。
    因此,必须指定3或更高(以未使用者为准)作为文件描述符。
<>:
    套接字对于读写都是打开的。根据需要,可以打开只读(<)或只写(>)的套接字。
protocol:
    可以是tcp或udp。
host:
    主机IP地址。
port:
    主机端口。
例如:
要打开127.0.0.1的双向TCP套接字,使用端口5000和文件描述符3:
    

$ exec 3 <> /dev/tcp/127.0.0.1/5000


关闭读/写套接字。第一个命令关闭输入连接,后者关闭输出连接。
    

$ exec {file-descriptor} <& - $ exec {file-descriptor}>& -
  • 在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)
  • Bash Shell中的TCP / UDP套接字示例

(1)通过udp发送信息到服务器(本机)的5000端口

#!/bin/bash

str1='hello,world'

echo $str1 > /dev/udp/127.0.0.1/5000

(2)获取远程网页并打印其内容

#!/bin/bash

exec 3<>/dev/tcp/xmodulo.com/80

echo -e "GET / HTTP/1.1\r\nhost: xmodulo.com\r\nConnection: close\r\n\r\n" >&3

cat <&3

(3)显示远程SSH服务器版本

#!/bin/bash

exec 3</dev/tcp/192.168.0.10/22

timeout 1 cat <&3

(4)从nist.gov显示当前时间

#!/bin/bash

cat </dev/tcp/time.nist.gov/13

(5)检查Internet连接

#!/bin/bash

HOST=www.mit.edu

PORT=80

(echo >/dev/tcp/${HOST}/${PORT}) &>/dev/null

if [ $? -eq 0 ]; then

    echo "Connection successful"

else

    echo "Connection unsuccessful"

fi

(6)对远程主机执行TCP端口扫描

#!/bin/bash

host=$1

port_first=1

port_last=65535

for ((port=$port_first; port<=$port_last; port++))

do

  (echo >/dev/tcp/$host/$port) >/dev/null 2>&1 && echo "$port open"

done

【注意】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值