当前位置: 首页 > article >正文

利用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=5
	elif [ $msg>60 ]; then
  		level=4
	elif [ $msg>50 ]; then
  		level=3
	elif [ $msg>30 ]; then
  		level=2
	elif [ $msg>10 ]; then
  		level=1
	else
  		level=0
	fi
	echo battery:$level
  
  elif [[ $command == wifirssi* ]]; then
    macs=`iw dev phy0-ap0 station dump | grep Station | awk -F' ' '{print $2}'`
    for var in $macs
    do
      ##echo $var
      if [[ $var != c8:f0:9e:2e:34:40 ]]; then
        rssi=`iw dev phy0-ap0 station get $var | grep signal: | awk -F' ' '{print $2}'`
        echo wifirssi:$rssi
        break 1
      fi
    done
  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!


http://www.kler.cn/a/108181.html

相关文章:

  • 解决:WSL2可视化opencv和pyqt冲突:QObject::moveToThread
  • 无人机动力测试台如何快速外接第三方传感器
  • 运行springBlade项目历程
  • 文件上传漏洞--理论
  • MySQL远程连接错误解决:Host is not allowed to connect to this MySQL server
  • 智能零售柜商品识别
  • 基于springboot环保话题管理系统-计算机毕设 附源码 28550
  • 【黑产攻防道03】利用JS参数更新检测黑产的协议破解
  • Android应用:实现网络加载商品数据【OKHttp、Glide、Gson】
  • VCS 和 SCM
  • 系统架构设计师-第13章-层次式架构设计理论与实践-软考学习笔记
  • Android蓝牙 - 常用蓝牙配置文件
  • 3D模型怎么贴法线贴图?
  • element的tabs组件使用问题解决
  • Java集成腾讯云OCR身份证识别接口
  • cosover是什么?crossover23又是什么软件
  • MAC下安装Python
  • Linux网络基础
  • IOC课程整理-15 Spring 类型转换
  • JavaScript_对象_Function_定义与参数
  • 文章分类管理接口
  • Gin vs Beego: Golang的Web框架之争
  • Vue 路由传参和获取参数的方法
  • C++类模板再学习
  • 闭包通俗解释,Demo(Go Java Python)
  • winodos下使用VS2022编译eclipse-paho.mqtt.c并演示简单使用的 demo