【问题标题】:Shellscript send a message to a socket and keep connection aliveShellscript 向套接字发送消息并保持连接处于活动状态
【发布时间】:2012-11-04 09:57:03
【问题描述】:

我对 shell 脚本很陌生,我的问题是我不确定如何使我的套接字连接有效。 我不确定我编写的脚本是否在做它应该做的事情。

我尝试做的是,我相信我创建了 140 个套接字并向这些套接字发送消息,并且我希望这些套接字连接保持活动状态。

for (( i=0; i<140; i++))
do
echo "Message" > /dev/tcp/187.98.06.01/4599
done

有一个我发送这个消息的服务器,我也得到一个日志消息,客户端连接在服务器端建立,但是当我检查套接字连接数时,这个数字是 0。我不确定是否是因为套接字连接正在关闭。

我需要保持套接字连接处于活动状态。 任何人都可以为上述代码提供建议或修复。

【问题讨论】:

    标签: shell


    【解决方案1】:

    我使用 GNU bash,版本 3.2.25(1)-release (x86_64-redhat-linux-gnu)。

    这不是很安全并且不是很便携,但是你应该能够写:

    # Open 140 TCP connections to port 4599 on 187.98.06.01, using
    # file-descriptors 60 through 199:
    for (( i = 0 ; i < 140 ; i++ )) ; do
        fd=$((i + 60))
        eval exec "$fd<>/dev/tcp/187.98.06.01/4599"
        echo Message >&$fd
    done
    
    # ... do whatever you want with these 140 connections ...
    
    # Close the connections:
    for (( i = 0 ; i < 140 ; i++ )) ; do
        fd=$((i + 60))
        eval exec "$fd<&-" "$fd>&-"
    done
    

    (它不可移植的原因是它依赖于并非所有 shell 共享的 Bash 功能。它不安全的原因是 shell 将文件描述符用于自己的内部内容,例如打开脚本和搜索目录. 描述符 0 到 9 — STDIN、STDOUT、STDERR 和其他七个 — 供您使用,但描述符 10 和更高的风险与 shell 正在执行的操作发生冲突。在 Bash 4.x 中有一个功能可以让您提供变量-name 重定向,让 Bash 决定使用什么文件描述符,但 Bash 3.x 没有。)

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 2012-07-08
      • 2018-04-13
      • 2021-12-24
      • 2013-09-23
      • 2012-01-03
      • 2021-09-13
      • 2013-08-27
      • 2019-09-01
      相关资源
      最近更新 更多