目录
通过/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
至于关闭连接,则通过以下命令,
shell给tcp或udp服务发送16进制报文指令exec 9>&-
exec 9<&-
指令:
(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打包的一些环境参数;