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”來查詢詳細的使用方式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章