顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - LPI

頁: [1]
1
whois 可以用來查詢某個網域的註冊者

但假如有一個公司很無聊,註冊了一大堆網域
到最後連他們自己都不清楚到底註冊了哪些網域....

請問有辦法用 whois 或其它方法
查出一家「公司名稱」或「e-mail」註冊的所有網域嗎?

謝謝

2
pptp client 組織,雖有提供解決方案和教學
http://pptpclient.sourceforge.net/

但它的教學都是 x-window 的

請問在只有 run-level 3,無視窗的環境下
該如何讓 pptp client 撥接上遠端的 pptp VPN server?

具體構想是:
使用 Linux 撥接上遠端 Linux 架好的 pptp server
透過路由規則,使本地 Linux 當路由器
讓本地區網,可以藉由 vpn 通道,直接連接遠端分公司之網段
形成一個 NET to NET 的 VPN

不過卡在不知道怎麼從文字模式,撥接上遠端 VPN 主機
拜了咕狗大神也找不到答案
可否請有經驗的大大,分享一下方法,感謝!

3
前言:
----------------------------------------------------------
相信不少人都有這種困擾:
有時候 ADSL 數據機,燈號都正常,但網路卻連不出去
非得把數據機電源關掉在重開,才能恢復正常

如果人在家裡,問題還好解決,去把數據機重開機就好
但如果出門在外,家裡網路斷線,導致 server 連不進去 (網路硬碟等應用)
那可就真的是 @!#$@#$%!.........


除了使用定時斷電器等方法 ,是否有更好的全自動化解決方案呢?

這就是本篇要探討的主題:「自動化偵測網路狀態,若斷線則重新啟動數據機」


↑照三餐斷線,煩不勝煩


硬體環境:
-----------------------------------------------------------
ADSL 數據機:ALCATEL SPEED TOUCH 340  (俗稱小白龜)
路由器主機 (NAT):Linux 電腦


具體構想:
---------------------------------------------------------------------------------
小白龜支援 telnet 登入
登入後,即可以下指令 restart 來重開機

不過問題是,小白龜只接受 192.168.1.1 這個 IP 作登入
對外網卡介面,是無法直接登入小白龜的
因此需要虛擬一個網路介面



虛擬一個網路介面 eth0:0
IP : 192.168.1.2  
mask : 255.255.255.0
network : 192.168.1.0

新增路由規則
要到 192.168.1.1,必須經過 192.168.1.2 (虛擬介面),裝置為 eth0
語法:route add -host 192.168.1.1 gw 192.168.1.2 dev eth0

路由規則重開機會消失,可以寫入 rc.local




如此一來,在那台 Linux 路由器主機,便可以 telnet 進 192.168.1.1 (小白龜)

telnet 192.168.1.1
使用者帳號:免
預設密碼:12345

若無法進入,可參考「破解小白龜密碼教學」:
http://www.pczone.com.tw/vbb3/showthread.php?t=90323


輸入 help ,會列出可用指令
------------------------------------------
restart 重開機
uptime 列出總開機時間
@close  離開


以上實現了:用指令操作小白龜,坐在電腦前,就可以令它重開機,不必人走過去按電源開關

但是這樣還是不夠的....

接著要程式會自動去偵測網路狀態,若斷線了,就令小白龜重開機
達到「全自動化,完全不需人工操作」的目標

如果一來,才能真正做到 24小時保持不斷線
或者出門在外,也不用擔心家裏 server 網路斷線



自動化方案:
-------------------------------------------------------------

全自動方面,由兩支 selll script 來達成,或是要整合成一支也行

原始碼一: (check-net.sh)
代碼: [選擇]

#!/bin/sh

# 檢查網路是否斷線,若斷線呼叫「ADSL 數據機自動重開機腳本」
# 建議寫入 cron 排程,每分鐘固定執行


# 用 ping ISP DNS 的方式,來確認網路是否斷線
# 因為ISP的DNS主機,有時也會掛掉,為避免誤判,所以確認兩家
# 搜尋含 0% 的字串,用 awk 取第6個字串
# 註:不能直接用有 0% 的一整行字串來判斷,因為 100% lost 中,也含有 0%

checkNet_01=`ping -c 1 61.64.127.1 | grep 0% | awk '{print $6}'`
checkNet_02=`ping -c 1 168.95.1.1 | grep 0% | awk '{print $6}'`

# echo 訊息為 debug 用,正式版可刪除
echo $checkNet_01
echo $checkNet_02

# 檢查變數是否「非」0%,若條件成立,代表網路不正常
# 若網路不正常,則呼叫「ADSL 數據機自動重開機腳本」
# 為避免誤判,只有在兩家 ISP DNS 都 ping 不到的情況下,條件才成立

# echo 訊息為 debug 用,正式版可刪除
if [ ! "$checkNet_01" == "0%" ] ;then
if [ ! "$checkNet_02" == "0%" ] ;then
/usr/local/bin/expect.sh
fi
else
echo "network is good"
fi



上面這個是簡單的 script
它會去 ping ISP 的 DNS,如果 ping 不到,就呼叫另一支 script 去處理一下小白龜

寫入 cron 排程,即可讓它每分鐘固定執行

vi /etc/crontab
---------------------------------------------------------
*/1 * * * * root /usr/local/bin/check-net.sh


/etc/rc.d/init.d/crond restart

chkconfg crond on



原始碼二:(expact.sh)  
代碼: [選擇]

#!/bin/sh

# =========================================================
# 對話型指令自動化輸入範本 v.01  最後修改日期:2006/06/26
#
# 必要條件:
# 執行此範本需要 expect 套件,請先檢查系統是否有安裝 expect 套件。
# 檢查是否有安裝:rpm -qa | grep expect
# 安裝:yum install expect (tck 是它的相依套件,需一併安裝)
#
# 說明:
# 對話型指令是指如:telnet、ftp、ssh ...等
# 必須使用者介入操作的指令
# 使用此範本,可達到自動化,無須人工操作之目的
# =========================================================


# =================================
# 變數定義
# =================================

# timeout 有兩種意義
# 1.最長等待連接時間,若超過則放棄
# 2.每次出現問答字串時,暫停回應的時間
# 此數值勿設太長,太長的話執行週期要等很久
# 若主機在遠端,回應時間較長,則此數值亦不宜設太短
# 單位:秒
TIMEOUT=1

# 主機名稱或IP
HOSTNAME='192.168.1.1'

# 使用者名稱與密碼
NAME=''
PASSWD='12345'


# ================================
# 對話型指令自動輸入流程腳本
# ================================

# expect -c " " 框住範圍內,為流程腳本,中間不可以插入 #註解,否則會發生錯誤
# expect [偵測螢幕上會出現的字串]
# send [出現這個字串時,要如何回應]

# 偵測字串必須為該行完整字串,不可以只取其中一個單字,否則抓不到
# 在回應中,雙引號 " 必須寫成 \",反斜線 \ 寫成 \\,\r 代表 <enter>


# 以下為範例腳本,模擬 ALCATEL SPEED TOUCH 340 的 telnet 過程
# 不保證字串一定正確,請使用者自行確認修改後再使用
expect -c "
set timeout $TIMEOUT

spawn telnet $HOSTNAME

expect {
timeout exit
\"password:\"
}
send \"$PASSWD\r\"

expect \">\"
send \"restart\r\"

expect \">\"
        send \"@close\r\"

"

echo



這支 script 是「自動化」的關鍵所在

telent 是一種問答式的程式
無法直接用管線餵資料的方式,讓它接收資料

但 Linux 提供了一種「巨集」的解決方法


expect 指令,可以建立一個流程腳本
它能在螢幕出現了某個字串時,回應使用者安排的對話

先將可能的對話都想好,然後寫一個流程腳本
如此一來,即使是 telnet 這類問答式的程式,仍然可以自動化


-------------------------------------------------------------------------------------------

測試過可行

分享給有需要的網友 :D

4
php 在傳送郵件的時候,使用的是 mail() 這個函式

但是 mail() 這個函式,並無法附加「電子簽章」
請問 php 寄送郵件有辦法加入「電子簽章」嗎?

搜尋網路,找到有關 openssl 的函數可以加密
但是沒提到「電子簽章」的問題

不知php 是否可呼叫外部程式如 mutt 之類得來處理 mail 問題?

或者除了「電子簽證」
有無其他好方法可以證明信件的發信源?
也請前輩指教

謝謝

5
MIS 討論區 / 關於國外出差
« 於: 2006-03-23 17:50 »
請問各位 MIS 前輩
如果應徵一份工作時,需要到人生地不熟的國外出差顧主機
每次2個月,每年約3次
但是薪水比較高,公司會提供住宿和機票

這樣是好還是壞呢?

6
小弟初學 shell script
寫了一支對發票的小工具,在 fedora 的 bash 下測試 ok
貼出來給有需要的朋友參考或使用
請學長們看看有沒有什麼bug或需要改進的地方


寫程式真是一件快樂的事啊
尤其是寫好的時候,真希望分享給大家使用
貼在這裡不知道會不會太奇怪
 :D

順便請問一下:
dialog 指令,做出來的假視窗
在 utf-8 環境下,邊框會有亂碼該如何解決?

 
感謝


代碼: [選擇]

#!/bin/bash

# ============================================
# 發票對獎
# 最後修改日期:2005/07/13
# ============================================

# 定義發票中獎號碼
# special_num 特獎
# win_num 頭獎,共三組

special_num=15563981
win_num01=43519058
win_num02=59717638
win_num03=64296485


# ==========================================================
# 子
# ==========================================================

# 判斷輸入字串是否為整數,若不是則傳回 error=1,$1代入字串
is_num () {
num_test=$1
[ "$num_test" -eq 0 ] 2>/dev/null
if [ $? -ge 2 ]; then
  error=1
else
  error=0
fi
}

# 顏色字串輸出,$1是否換行,$2 $3 顏色控制碼,$4要輸出的字串
echo_color () {
if [ $1 -eq 1 ]; then
  printf "\033[$2;$3m$4\033[0m"
else
  printf "\033[$2;$3m$4\033[0m\n"
fi
}

# 特獎的進階比對
special_test () {
echo
echo_color 1 1 35 "這張發票有可能中特獎,請輸完整 8 碼數字:"
read num_all
echo
if [ "$num_all" = "$special_num" ]; then
  echo_color 0 1 32 '天啊~恭喜您中了第一特獎,獎金 NT$ 2,000,000!'
else
  echo_color 0 1 36 "可惜~就只差那麼一點了....."
fi
}

# 頭獎的進階比對
win_test () {
echo
echo_color 1 1 35 "恭喜您中獎了,請輸入完整 8 碼數字,以確定獎項:"
read num_all
echo
for var in "$win_num01" "$win_num02" "$win_num03"
do
  if [ "$num_all" = "$var" ]; then
echo_color 0 1 32 '恭喜您中了頭獎,獎金 NT$ 200,000!'
break
  elif [ "$(echo "$num_all" | cut -c 2-8)" = $(echo "$var" | cut -c 2-8) ]; then
echo_color 0 1 32 '恭喜您中了二獎,獎金 NT$ 40,000!'
break
  elif [ "$(echo "$num_all" | cut -c 3-8)" = $(echo "$var" | cut -c 3-8) ]; then
echo_color 0 1 32 '恭喜您中了三獎,獎金 NT$ 10,000!'
break
  elif [ "$(echo "$num_all" | cut -c 4-8)" = $(echo "$var" | cut -c 4-8) ]; then
echo_color 0 1 32  '恭喜您中了四獎,獎金 NT$ 4,000!'
break
  elif [ "$(echo "$num_all" | cut -c 5-8)" = $(echo "$var" | cut -c 5-8) ]; then
echo_color 0 1 32  '恭喜您中了五獎,獎金 NT$ 1,000!'
  break
  elif [ "$(echo "$num_all" | cut -c 6-8)" = $(echo "$var" | cut -c 6-8) ]; then
echo_color 0 1 32  '恭喜您中了六獎,獎金 NT$ 200!'
break
  fi
done
}

# 顯示 - 錯誤終止
error_exit () {
echo
echo_color 0 1 31 "
echo
exit
}

# 顯示 - 輸入的數字不對
error_num () {
echo
echo_color 0 1 31 "輸入字數不符或非數字..."
}

# 顯示 -
go_exit () {
echo
echo_color 0 1 33 "### 謝謝使用發票對獎
echo
exit
}


# ==============================================================
# 主
# ==============================================================

# 檢查發票中獎號碼格式是否正確
for var in "$special_num" "$win_num01" "$win_num02" "$win_num03"
do
is_num "$var"
if [ "$error" -eq 1 ]; then
  error_exit
elif [ ${#var} -ne 8 ]; then
  error_exit
fi
done

#
until [ ]
do
echo
echo_color 1 1 37 "請輸入發票末三碼 (結束:exit):"
read num

# 判斷輸入是否為 exit,若是則結束
if [ "$num" = "exit" ]; then
  go_exit
fi

# 判斷輸入格式是否正確
is_num "$num"
if [ "$error" -eq 1 ]; then
  error_num
  continue
elif [ ${#num} -ne 3 ]; then
  error_num
  continue
fi

# 進行比對
case "$num" in
  $(echo "$special_num" | cut -c 6-8))
special_test
;;
  $(echo "$win_num01" | cut -c 6-8))
win_test
;;
  $(echo "$win_num02" | cut -c 6-8))
win_test
;;
  $(echo "$win_num03" | cut -c 6-8))
win_test
;;
esac
done


頁: [1]