利用Linux socat快速搭建TCP服务器

某些场合,需要在Linux上快速搭建一个TCP的服务器,接收客户端的连接,返回一些数据。

一般用于测试或者负载不大,安全性要求不高的场合,达到快速搭建的目的。

本文以客户端通过服务器的3334端口,获取服务器连接的modem网卡蜂窝信号强度为例,说明使用方法。

第一步:

假设服务器端获取modem网卡的命令及返回值如下:

其中,对我有用的如下字段:

复制代码
signal quality: 100% (recent)

第二步:

随后在服务器下新建getSignalLevel.sh脚本,赋予a+x权限

复制代码
#!/bin/sh -

while read command;
do
  ##echo got msg:$command

  if [[ $command == battery* ]]; then
	msg=`mmcli -m 0 | grep "signal quality:" | awk -F':' '{print $2}' | awk -F'%' '{print $1}'`
	##echo battery levle:$msg

	level=5;
	if [ $msg>80 ]; then
  		level=4
	elif [ $msg>60 ]; then
  		level=3
	elif [ $msg>40 ]; then
  		level=2
	elif [ $msg>20 ]; then
  		level=1
	else
  		level=0
	fi
	echo battery:$level
  fi
done

然后在服务器端执行如下命令:

复制代码
socat -d -d tcp-l:3334,fork,reuseaddr exec:/etc/getSignalLevel.sh &

该shell命令的作用是监听3334端口,把收到的数据转发给getSignalLevel脚本处理;上述shell脚本中循环读取外部输入,如果是指定字符串打头"battery",就转成0-4的int型singal level,并作为输出返回给socat,socat收到后通过3334端口返回给tcp client;

第三步:

起一个端口调试器,模拟客户端,输入命令,获取结果,运行截图如下:

注意,输入的battery:后面要带换行符,因为shell的read命令是检测回车换行作为字符截止的。

教程结束,enjoy!

相关推荐
骑着蜗牛撵大象3276 小时前
服务下线不再炸:分层关闭、TCP 存活探测与负载均衡排水的落地套路
android·tcp/ip·负载均衡·tcp·高可用·健康检查·优雅关闭
xbzb8 小时前
Shell 函数:语法、传参与递归调用一次讲透
shell·递归·函数·调用·传参·递归调用
东鹏特饮2 天前
15个实用Linux运维脚本
linux·运维·shell·脚本·redhat·常用生产脚本
Zoom2 天前
【开源】7 天,我用 Rust 复刻了 FinalShell!Rhost v1.0.0 发布
rust·electron·shell
洋不写bug4 天前
网络编程(二)TCP回显服务器与客户端通信详解
服务器·网络·tcp/ip·tcp·网络通信·javaee·回显服务器
洋不写bug4 天前
网络原理(一)应用层协议、传输层UDP/TCP报文格式解析
网络·tcp/ip·udp·tcp·应用层·javaee·传输层
流浪0015 天前
计算机网络篇3:端口号与 socket:数据到达主机后,如何找到目标进程?
计算机网络·udp·tcp·端口·网络字节序
Brookty9 天前
双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍
网络·tcp
阿钱真强道9 天前
17 嵌入式操作系统 | uloop 事件循环:TCP 客户端
c语言·tcp/ip·tcp·事件循环·uloop
0+11110 天前
Linux --应用层自定义协议与序列化
linux·运维·服务器·网络·tcp