`
sealbird
  • 浏览: 570738 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Bash Socket 编程

 
阅读更多
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”来查询详细的使用方式。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics