【测试】echo发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包_shell脚本接收udp-程序员宅基地

技术标签: udp  测试  网络编程  tcp/ip  

目录

shell发送TCP/UDP消息

发UDP消息

发TCP消息

shell创建TCP服务端和客户端

shell给tcp或udp服务发送16进制报文指令

shell处理进制数和字节

shell 10进制转16进制数

十六进制字符串到字节

shell字符串倒叙

shell判断大小端序

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


shell发送TCP/UDP消息

Linux shell脚本中发起tcp、udp连接_Blue summer的博客-程序员宅基地

通过/dev/tcp、/dev/udp可以直接在shell脚本中发起tcp、udp连接,方便又高效,平时用于测试啥的还是挺方便的。

发UDP消息

格式 /dev/udp/ip/port

例子:向本地10001端口发送数据,可以使用
echo "hello" > /dev/udp/localhost/10001

如果需要循环向特定udp端口发送数据,则:

while true
do
echo "xxxx" > /dev/udp/localhost/10001
done


链接:https://www.jianshu.com/p/b55f3aa77b07

发TCP消息

exec 9<>/dev/tcp/10.100.70.139/19006    #创建tcp链接

echo -e "stats" >&9     #发送消息

关闭链接:

exec 9>&-

exec 9<&-

exec 9>/dev/tcp/192.168.0.136/5000
其中9为执行的文件描述符。可以是与每个套接字相关联的唯一的非负整数。文件描述符0,1和2分别保留给stdin,stdout和stderr。因此,必须指定3或更高(以未使用者为准)作为文件描述符。

这里> 重定向符表示该文件描述符,单向套接字只能写入,<>即代表示双向TCP套接字可读可写。

原文链接:https://blog.csdn.net/u010039418/article/details/86251470

更多见:https://codeleading.com/article/88292622727/

shell创建TCP/UDP服务端和客户端

使用nc (Netcat) 命令创建一个简单的 TCP /UDP服务器

TCP

服务端

#!/bin/bash
# 定义监听的端口号
port=10266
# 创建一个简单的 server,监听指定的端口,并打印接收到的信息
while true; do
nc -l $port | while IFS= read -r line; do
echo "$line"
done
done

客户端
echo "hello" > /dev/tcp/10.223.218.209/10266

UDP
服务端,就是nc 加-u参数

#!/bin/bash
# 定义监听的端口号
port=10266
# 创建一个简单的 server,监听指定的端口,并打印接收到的信息
while true; do
nc -u -l $port | while IFS= read -r line; do
echo "$line"
done
done

客户端

echo "hello" > /dev/udp/10.223.218.209/10266

shell给tcp或udp服务发送16进制报文指令

指令:
(sleep 2;echo "000F737D61747573" | xxd -r -p ;sleep 1)|nc 192.168.137.1 15000|hexdump -C

说明:上面为tcp示例(给nc添加参数-u可改为udp,但没验证,理论上可行)

示例功能:给192.168.137.1上的15000端口tcp服务送16进制报文内容000F737D61747573并将响应报文以16进制格式回显出来

shell处理进制数和字节

shell 10进制转16进制数

dec2hex(){
    printf "%x" $1
}

a=$(dec2hex 2131165531)
echo $a

10进制转16进制:15 > 0xf
printf '%x\n' 15
16进制转10进制:0xf > 15
printf '%d\n' 0xF
echo $((16#f))
16进制转8进制:0xF > 17
printf '%o\n' 0xF
8进制转10进制:8#17 > 15
echo $((8#17))
2进制转10进制:2#1111 > 15
echo $((2#1111))

原文链接:https://blog.csdn.net/blog_zxb/article/details/106402723

还可以利用bc输出进制数

Linux 小技巧:bc输出进制 倒叙正序输出 查看汇编_ Zach-Zona的博客-程序员宅基地

十六进制字符串到字节

linux shell脚本:十六进制字符串到字节 - 码客

shell字符串倒叙

方法1,使用rev

[root@rdma55 ~]# echo "ABC"|rev
CBA

方法2,使用awk
awk '{ for(i=length($0);i>0;i--){printf substr($0,i,1)}; printf "\n"}' file.txt

[root@rdma55 ~]# echo "ABC"|awk '{ for(i=length($0);i>0;i--){printf substr($0,i,1)}; printf "\n"}'
CBA

Linux shell:文本的按行逆序和字符串逆序_匿_名_用_户的专栏-程序员宅基地

shell判断大小端序

方法一
echo -n I | od -o | head -n1 | cut -f2 -d" " | cut -c6
输出:1为小端模式,0为大端模式;

解析:od命令的作用为将指定内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示;

方法二
echo -n I | od -o | head -n1 | awk '{print $2}'| cut -c6
输出:1为小端模式,0为大端模式;

解析:awk命令为文本处理。

方法三
lscpu | grep -i byte
输出:Byte Order:            Little Endian;

解析:grep -i 为不区分大小写匹配;

注意:在低版本的Linux可能不支持lscpu命令。

方法四
dpkg-architecture | grep -i end
输出:

      DEB_BUILD_ARCH_ENDIAN=little

      DEB_HOST_ARCH_ENDIAN=little

      DEB_TARGET_ARCH_ENDIAN=little

解析:dpkg-architecture命令是列出dpkg打包的一些环境参数;
原文链接:https://blog.csdn.net/nicai_xiaoqinxi/article/details/85311458

(备份:https://codeleading.com/article/88292622727/)

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

技术标签: Linux  Shell  Shell

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参数中内容写入套接字:
    


  1. $echo -ne $MESSAGE>&3

  2. $printf $MESSAGE>&3

要从套接字读取消息并将其存储在$MESSAGE参数中:
 


  1. $read -r -u -n $MESSAGE <&3

  2. $MESSAGE = $(dd bs = $NUM_BYTES count = $COUNT <&3 2> /dev/null)

  • Bash Shell中的TCP / UDP套接字示例

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


  1. #!/bin/bash

  2. str1='hello,world'

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

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


  1. #!/bin/bash

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

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

  4. cat <&3

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


  1. #!/bin/bash

  2. exec 3</dev/tcp/192.168.0.10/22

  3. timeout 1 cat <&3

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


  1. #!/bin/bash

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

(5)检查Internet连接


  1. #!/bin/bash

  2. HOST=www.mit.edu

  3. PORT=80

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

  5. if [ $? -eq 0 ]; then

  6.     echo "Connection successful"

  7. else

  8.     echo "Connection unsuccessful"

  9. fi

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


  1. #!/bin/bash

  2. host=$1

  3. port_first=1

  4. port_last=65535

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

  6. do

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

  8. 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)中使用套接字支持。

版权声明:本文为R_W_zhang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:【Shell】通过shell脚本调用tcp/udp socket_shell socket-程序员宅基地

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bandaoyu/article/details/115717201

智能推荐

JSTL 标签大全详解_jstl标签-程序员宅基地

文章浏览阅读10w+次,点赞124次,收藏539次。(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53311722 冷血之心的博客)关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~目录一、JSTL标签介绍1、什么是JSTL?2、JSTL标签库:3、使用taglib指令导入标签库:4、core标签库常用标签:..._jstl标签

Java调用shell脚本及参数传递_java给shell传数组变量-程序员宅基地

文章浏览阅读2.3k次。Java调用shell脚本及参数传递需求脚本示例执行代码封装工具类最后需求项目需求:由于Python没有提供Http请求的接口,而是以脚本的方式调用,Java需要调用pyhon脚本得到结果返回写入文件,然后Java再读取写入的文件,拿到结果页面展示。坑:这种方式适合单线程模式,不是个多个请求并发,写入的文件是固定的,并发情况下,第一的请求如果读取的是第二次请求的结果,就会有问题。脚本示例Java代码不是直接调用python脚本,而是先调用shell脚本,shell脚本再调用python脚本,Ja_java给shell传数组变量

【R语言(一)】R 和 RStudio的安装与初步使用-程序员宅基地

文章浏览阅读7.9k次,点赞10次,收藏69次。R是一种流行的统计软件和编程语言,用于数据分析和可视化。它是一个开源的软件,拥有庞大的社区支持和丰富的扩展包,可运行在各种操作系统上,如Windows、Mac和Linux。R被广泛应用于数据科学、统计学、机器学习和其他相关领域的研究和实践中。以下是R的一些主要特点:数据分析和可视化:R可以轻松地导入、整理和分析数据,然后将结果以各种方式可视化,如绘制图表、创建热图等。R还提供了许多常见的统计分析方法,如线性回归、ANOVA、聚类分析等。编程语言:R是一种完整的编程语言,具有各种编程结构和数据类型。_rstudio

VB6-该部件的许可证信息没有找到的解决方法_vb licenses-程序员宅基地

文章浏览阅读9.2k次。VB6添加控件时提示 该部件的许可证信息没有找到,将以下文件保存为注册表文件并导入Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses] @="Licensing: Copying the keys may be a violation of established copyrights._vb licenses

android agentweb进度,AgentWeb-Android-H5混合开发-程序员宅基地

文章浏览阅读301次。简介agentweb 是对webview进行的又一层封装较为轻量级所以基本的开发流程大致和webview原理相似将html5文件方入asset文件夹下,访问路径为final private String CoachFile = "file:///android_asset/teacher/info-teacher.html";运行demo此demo使用了bintray/Jcenter 这个东西Jc..._agentweb token

【Phone ECC】紧急号码的管理及客制化方法_sim卡 ecclist-程序员宅基地

文章浏览阅读614次。[Android Version]Android 5.0/5.1 (L)Android 6.0 (M)Android 7.0(N)Android 8.0(O)[DESCRIPTION]L及之后的版本紧急号码Customer的部分改成了在XML文件中来配置,文件的路径: alps\vendor\mediatek\proprietary\external\EccL..._sim卡 ecclist

随便推点

万字长文,深度解析SpringMVC 源码,让你醍醐灌顶!!-程序员宅基地

文章浏览阅读4.1k次,点赞11次,收藏92次。文末可以领取所有系列高清 pdf。大家好,我是路人,这是 SpringMVC 系列第 16 篇。本文将通过阅读源码的方式带大家了解 springmvc 处理请求的完整流程,干货满满。目录1..._springmvc源码分析

kdump核心崩溃信息存储到SSH服务器-程序员宅基地

文章浏览阅读752次。1、配置测试机和SSH服务器之间的免密钥登录:测试机生成密钥#ssh-keygen -t rsa将/root/.ssh/id_rsa.pub中的内容拷贝到SSH服务器的/root/.ssh/authorized_keys文件中,并修改文件权限为600;2.、编辑测试机的/etc/kdump.conf,注释其他内容,并在文件末尾添加:ssh [email protected] sshkey /root/.ssh/id_rsa path /sshkdump core_collect_核心崩溃信息存储到ssh服务器

java财务对账系统设计_对账系统设计-程序员宅基地

文章浏览阅读1.4k次。更多支付内容请移步个人站:YKBLog.top对账整体设计从整体来看,按照时序维度的先后,系统对账主要分为三阶段的工作。分别是数据准备、数据核对和差错处理。数据准备细分一下,又分为文件获取、文件解析、数据清洗。在对账专业概念中,数据核对和差错处理又叫轧账和平账。具体设计脑图如下:check-arch.png对账各个模块设计数据准备数据准备,顾名思义,我们需要把对账所需的全部数据,接入到我们的对账系..._java 对账实战思路

Python新姿势:用魔法方法玩转对象-程序员宅基地

文章浏览阅读887次,点赞23次,收藏17次。Python中魔法方法(magic method)其实就是那些被双下划线包围的方法,比如__init____str__等等。这些魔法方法为类添加了**“魔力”,让我们可以在面向对象编程中用更加简洁的代码来操作对象。本篇根据面向对象编程的一些场景来介绍常用的魔法方法**。Python的魔法方法很多,本文只是列举了其中很少的一部分,github上有一个示例python。

小程序云开发 上传图片到云存储_微信小程序上传图片到云存储-程序员宅基地

文章浏览阅读9.4k次,点赞20次,收藏102次。在学习了小程序云开发后,遇到了开发中常见的图片上传,今天简单的记录总结下在云开发中如何实现图片上传到云存储中。_微信小程序上传图片到云存储

ftp服务器上传文件频率,ftp服务器上传文件速度多少-程序员宅基地

文章浏览阅读1k次。ftp服务器上传文件速度多少 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。使用FTP上传文件时,写入失败,文件传输失败。该文档适用于Windows系统上的FTP服务。FTP服务端在NAT环境下,客户端需使用被动模式连接服务端。在这种情况下,服务端的IP地址无法从路由器外部访问,所以..._c# ftp上传速度默认多少

推荐文章

热门文章

相关标签