【测试】echo发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包

目录

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的博客-CSDN博客

通过/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

更多见:【Shell】通过shell脚本调用tcp/udp socket - 代码先锋网

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

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

TCP

服务端

 
  1. #!/bin/bash

  2. # 定义监听的端口号

  3. port=10266

  4. # 创建一个简单的 server,监听指定的端口,并打印接收到的信息

  5. while true; do

  6. nc -l $port | while IFS= read -r line; do

  7. echo "$line"

  8. done

  9. done

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

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

 
  1. #!/bin/bash

  2. # 定义监听的端口号

  3. port=10266

  4. # 创建一个简单的 server,监听指定的端口,并打印接收到的信息

  5. while true; do

  6. nc -u -l $port | while IFS= read -r line; do

  7. echo "$line"

  8. done

  9. 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进制数

 
  1. dec2hex(){

  2. printf "%x" $1

  3. }

  4. a=$(dec2hex 2131165531)

  5. 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的博客-CSDN博客

十六进制字符串到字节

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:文本的按行逆序和字符串逆序_匿_名_用_户的专栏-CSDN博客

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-CSDN博客

【测试】echo发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在上安装和测试TCPUDP的工具有很多选择,以下是其中几个常用的工具: 1. netcat (nc):Netcat 是一个功能强大的网络工具,可以用于创建 TCPUDP 连接,并进行数据传输。在大多数 Linux 发行版中,Netcat 可以直接通过软件包管理器进行安装。 安装命令: ``` sudo apt-get install netcat # Debian/Ubuntu sudo yum install nc # CentOS/RHEL ``` 使用示例: ``` # 在服务器上监听端口 nc -l -p <port> # TCP nc -l -u -p <port> # UDP # 在客户端连接到服务器 nc <server_ip> <port> # TCP echo "Hello, World!" | nc -u <server_ip> <port> # UDP ``` 2. iperf:Iperf 是一个网络性能测试工具,可以用于测量带宽、延迟和数据包丢失等指标。它支持 TCPUDP 协议,并提供了丰富的参数选项。 安装命令: ``` sudo apt-get install iperf # Debian/Ubuntu sudo yum install iperf # CentOS/RHEL ``` 使用示例: ``` # 在服务器上启动 iperf 服务 iperf -s # TCP iperf -s -u # UDP # 在客户端连接到服务器进行测试 iperf -c <server_ip> # TCP iperf -c <server_ip> -u # UDP ``` 3. hping3:Hping3 是一个网络探测和攻击工具,可以发送自定义的 TCPUDP 或 ICMP 数据包,并分析返回的响应。它提供了丰富的选项,适用于网络调试和安全测试。 安装命令: ``` sudo apt-get install hping3 # Debian/Ubuntu sudo yum install hping3 # CentOS/RHEL ``` 使用示例: ``` # 发送 TCP SYN 包 sudo hping3 -c 4 -S -p <port> <target_ip> # 发送 UDP 包 sudo hping3 -c 4 -2 -p <port> <target_ip> ``` 这些工具可以帮助你在Linux上进行TCPUDP测试和调试。在使用之前,请确保你已经理解工具的使用方法和注意事项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值