Bash Socket 编程
你可以在bash中开启一个socket链接,并且传输数据。Bash有两个特殊的设备文件:
• /dev/tcp/host/port - 如果hostname,和port是合法的话,bash会尝试开启一个TCP连接。
• /dev/udp/host/port - 如果hostname和port是合法的话,bash会开启一个UDP连接。
你可以利用这个技术来测试一台主机的端口是否是开启的,而不需要使用nmap或者port扫描器:
view sourceprint?
1 # find out if TCP port 25 open or not
2 (echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"
你可以 使用循环来查找开着的端口:
view sourceprint?1 echo "Scanning TCP ports..."
2 for p in {1..1023}
3 do
4 (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"
5 done
输出:
Scanning TCP ports...
22 open
53 open
80 open
139 open
445 open
631 open
下面的这个例子让你的脚本扮演HTTP客户端:
view sourceprint?
01 #!/bin/bash
02 exec 3<> /dev/tcp/${1:-www.cyberciti.biz}/80
03
04 printf "GET / HTTP/1.0\r\n" >&3
05 printf "Accept: text/html, text/plain\r\n" >&3
06 printf "Accept-Language: en\r\n" >&3
07 printf "User-Agent: nixCraft_BashScript v.%s\r\n" "${BASH_VERSION}" >&3
08 printf "\r\n" >&3
09
10 while read LINE <&3
11 do
12 # do something on $LINE
13 # or send $LINE to grep or awk for grabbing data
14 # or simply display back data with echo command
15 echo $LINE
16 done
关于GUITools和Cronjob
如果你使用cronjob来调用你的脚本的话,你要通过“ export DISPLAY=[user's machine]:0 ”命令来设置本地的 display/input 服务。例如调用 /home/vivek/scripts/monitor.stock.sh脚本,它使用了 zenity 工具:
view sourceprint?
1 @hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh
所有的命令你都可以通过“man”来查询详细的使用方式。
Bash Socket 编程
最新推荐文章于 2024-08-27 15:25:11 发布