目录

​通过/dev/tcp、/dev/udp​

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

​shell处理进制数和字节​

​shell 10进制转16进制数​

​十六进制字符串到字节​

​shell字符串倒叙​

​shell判断大小端序​



通过/dev/tcp、/dev/udp

通过/dev/tcp、/dev/udp可以直接在shell脚本中发起tcp、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

先建立连接

exec 9<>/dev/tcp/10.100.70.139/19006

echo -e "stats" >&9

exec 9>/dev/tcp/192.168.0.136/5000

其中9为执行的文件描述符。这里>重定向符表示该文件描述符只能写入,如果想读取,可使用一下命令,

exec 9<>/dev/tcp/192.168.52.136/5000


至于关闭连接,则通过以下命令,

exec 9>&-

exec 9<&-

​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的博客-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打包的一些环境参数;