(译)socket in your shell
04 Dec 2020
|
|
整理自这篇博客
简单说,就是基本工具shell也可以用socket来做服务/客户端(尤其是在没有nc/telnet的场景下)
作者列了普通bash和zsh下两种用法
bash
echo "text!" > /dev/$PROTO/$HOST/$PORT
一个检测例子
#!/bin/bash
if exec 3>/dev/tcp/localhost/4000 ; then
echo "server up!"
else
echo "server down."
fi
我以前都用netcat检测
也可以用exec检测
samplecurl
#!/bin/bash
exec 3<>/dev/tcp/"$1"/80
echo -e "GET / HTTP/1.1\n" >&3
cat <&3
使用
$ ./simplecurl www.google.com
HTTP/1.1 200 OK
Date: Thu, 03 Dec 2020 00:57:30 GMT
Expires: -1
....
<google website>
zsh
有内建模块支持
zmodload zsh/net/tcp
这行放到.zshrc
,或者shell里执行,就加载了ztcp
# host machine:
lfd=$(ztcp -l 7128)
talkfd=$(ztcp -a $lfd)
# client machine
talkfd=$(ztcp HOST 7128)
这样客户端服务端的fd有了,就可以通话了
# host machine
echo -e "hello!" >&$talkfd
# client machine
read -r line <&$talkfd; print -r - $line
> hello!