发送套接字消息的简单shell脚本

Bac*_*alo 27 shell-script socket tcp-ip

出于测试目的,我需要创建一个 shell 脚本,该脚本与远程 IP>Port 连接并发送一个简单的文本 TCPIP 套接字消息。

Kus*_*nda 34

使用nc( netcat)。

服务器:

$ nc -l localhost 3000
Run Code Online (Sandbox Code Playgroud)

客户:

$ nc localhost 3000
Run Code Online (Sandbox Code Playgroud)

服务器和客户端都将读取和写入标准输出/输入。

当服务器和客户端在同一台机器上时,这将起作用。否则更改localhost为服务器的外部名称。

更有趣的是,一个“服务器”,如果你连接到它并发送它d,它会给你一天中的时间,如果你发送它就会退出q

服务器(在bash):

#!/bin/bash

coproc nc -l localhost 3000

while read -r cmd; do
  case $cmd in
    d) date ;;
    q) break ;;
    *) echo 'What?'
  esac
done <&"${COPROC[0]}" >&"${COPROC[1]}"

kill "$COPROC_PID"
Run Code Online (Sandbox Code Playgroud)

客户会话:

$ nc 本地主机 3000
d
欧洲中部时间 2017 年 1 月 12 日星期四 18:04:21
你好?
什么?
q

(服务器在 之后退出q,但在您按下 之前客户端不会检测到它已经消失Enter)。

  • 如果客户端完成发送数据时服务器返回结果,`ctrl+c` 不会显示结果。如果使用echo,例如`echo "cookie" | nc localhost 9090`,客户端的输出流将被关闭(eof 发送)但客户端仍将等待服务器的结果。 (2认同)

Val*_*yKr 16

一般来说,建议使用netcat是更好的方法。

但是在bashandksh你也可以这样做:

exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
Run Code Online (Sandbox Code Playgroud)


Arc*_*mar 5

尝试 netcat(例如 nc )

echo GET / HTTP/1.0 | nc 0 80
HTTP/1.1 400 Bad Request
Date: Thu, 12 Jan 2017 13:44:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
  • 在上面的示例中,我将 GET ( echo GET / HTTP/1.0)发送到我的本地 http 服务器
  • 如果您不想要复杂的协议,这可能会完成这项工作。