2009年12月23日 星期三

XSL 中 checkbox 如何設定 checked

設定方式如下:
<input type="checkbox" name="test" value="checked" checked="y"/>

XSL 中的空白字元

XSL 中使用 &nbsp; 新增空白字元會出現錯誤,可以改用 &#160; 取代。

XSL 中使用一組不固定資料來判斷另一組資料的輸出值

XML 如下
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="key_sample.xsl" ?>
</document>
<test id="1" name="a">
<test id="2" name="b">
<test id="3" name="c">
<test id="4" name="d">

<data>
<item>
<id>1</id>
<value>value1</value>
<testid>1</testid>
</item>
<item>
<id>2</id>
<value>value2</value>
<testid>1</testid>
</item>
<item>
<id>3</id>
<value>value3</value>
<testid>3</testid>
</item>
<item>
<id>4</id>
<value>value4</value>
<testid>2</testid>
</item>
</data>
</document>


XSL 如下
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:key name="test-search" match="test" use="@id"/>
<xsl:template match="document">
<HTML>
<BODY>
<xsl:for-each select="data/item">
<div>
id=<xsl:value-of select="id" />
value=<xsl:value-of select="value" />
<xsl:for-each select="key('test-search', testid)">
test name=<xsl:value-of select="@name"/>
</xsl:for-each>
</div>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>

輸出結果如下
id=1 value=value1 test name=a
id=2 value=value2 test name=a
id=3 value=value3 test name=c
id=4 value=value4 test name=b

2009年12月18日 星期五

PHP 時間週相關函式

// 傳回指定年份有多少週
function year_week_num($year){
$days = (checkdate(2, 29, $year) ? 366 : 365) + date("w", mktime(0,0,0,1,1 ,$year));
$mod = $days % 7;
return ($days-$mod) / 7 + ($mod>0 ? 1 : 0);
}

// 傳回指定年份第幾週開始及結束的日期
function year_week($year, $weekno){
if($year<1972) t =" (6-date(" t1 = "$year-01-01" t2 =" date("> year_week_num($year)) $weekno = year_week_num($year);

$t = (($weekno-2)*7 + (7-date("w", mktime(0,0,0,1,1, $year)))) * 86400;

$t1 = date("Y-m-d", mktime(0,0,0,1,1, $year) + $t);
$t2 = date("Y-m-d", mktime(0,0,0,1,1, $year) + $t+86400*6);
return array($t1, $t2);
}

2009年11月25日 星期三

CISCO WS-C3560 IP Source Guard 設定摘要

1.建立 IP Source Guard 使用埠的巨集
建立巨集指令為 switch(config)#macro name macro-name
內容如下:
# macro:oa-clinet
# connect oa network's PC
switchport mode access

# Enable port security limiting port to a single
# MAC address -- that of desktop
switchport port-security
switchport port-security maximum 5

# Ensure port-security age is greater than one minute
# and use inactivity timer
switchport port-security violation restrict
switchport port-security aging time 2
switchport port-security aging type inactivity

# ip source guard
# 確認該介面下MAC所對應的IP位置,是由DHCP所配發,防止用戶隨意更改IP位置
ip verify source port-security

2.建立連接DHCP 伺服器使用埠的巨集
建立巨集指令為 switch(config)#macro name macro-name
內容如下:
# macro:oa-switch
# connect backbone switch
ip arp inspection trust
ip arp inspection limit rate 500 burst interval 3
ip dhcp snooping limit rate 500 // 防止DHCP DOS攻擊,限制Switch轉送DHCP request的速率
ip dhcp snooping trust

3.整體的設定如下:
switch(config)#ip dhcp snooping vlan 1
switch(config)#ip dhcp snooping
switch(config)#ip arp inspection validate src-mac dst-mac
switch(config)#errdisable recovery cause arp-inspection
switch(config)#errdisable recovery interval 3600

4.將交換器上各埠分別套用 1,2 所建立的巨集
switch(config-if)#macro apply macro-name

其他
取消 oa-clinet 巨集的巨集
內容如下
# macro:no-oa-clinet
# remove macro oa-client
# Enable port security limiting port to a single
# MAC address -- that of desktop
no switchport port-security maximum 5

# Ensure port-security age is greater than one minute
# and use inactivity timer
no switchport port-security violation restrict
no switchport port-security aging time 2
no switchport port-security aging type inactivity
no switchport port-security
no switchport mode access
# ip source guard
no ip verify source port-security
no macro description

取消 oa-switch 巨集的巨集
內容如下
# macro:no-oa-switch
# disable oa-switch macro
no ip arp inspection trust
no ip arp inspection limit rate 500 burst interval 3
no ip dhcp snooping limit rate 500
no ip dhcp snooping trust


相關的查詢指令:
show ip dhcp snooping
show ip dhcp snooping binding
show cdp neighbors
show arp-list
show ip arp inspection interfaces
show port-security

CISCO WS-C3560G 忘記密碼,恢復預設值方法

以下方法會失去所有的設定內容
1.拔去電源重新開機。
2.開機完成後,長按前方面板 mode,燈號會開始閃爍,進入重置,自動重新開機。
3.完成開機後即恢復預設。

CISCO WS-C3560G 交換器 NTP 校時設定


1.設定 log 及 debug 訊息的時間戳記
service timestamps debug datetime localtime
service timestamps log datetime localtime

2.設定時區為台灣時區
clock timezone TW +8

3.設定NTP來源的介面來源為 vlan 1
ntp vlan 1

4.指定NTP Server位址,可設定多部伺服器
ntp server 220.130.158.52


顯示 NTP 狀態指令
show ntp status
show ntp associations


其他相關指令
ntp peer // 設定內部NTP設備的IP位址
clock set // 設定時間
show clock // 檢視目前時間


參考資料
http://www.cisco.com/en/US/docs/ios/12_0/configfun/configuration/guide/fcgenral.html#wp4036

2009年9月23日 星期三

修復 RPM:Lock table is out of available locker entries

當 rpm -aq 結果不正常,訊息如下時:
rpmdb: Lock table is out of available locker entries
rpmdb: Unknown locker ID: 4ab8
error: db4 error(22) from db->close: Invalid argument
error: cannot open Packages index using db3 - Cannot allocate memory (12)
error: cannot open Packages database in /var/lib/rpm

可用以下方式修復:
1.tar cvzf /root/rpmdb-backup.tar.gz /var/lib/rpm //備份 /var/lib/rpm 資料
2.rm /var/lib/rpm/__db.00* //刪除 RPM 資料庫
3.rpm --rebuilddb //重建 RPM 資料庫,需要一段時間

CentOS 安裝 PHP XML 相關套件

PHP XML 相關套件如下:

yum install php-soap
yum install php-dom
yum install php-xml

CISCO PIX 復原

CISCO PIX IOS 更新失敗或不明原因造成 IOS image 損毀無法開機,可以使用以下方式復原,以下以 IOS 7.0 為例

一.架設 tftp 伺服器(192.168.1.1),並準備好 IOS image (pix701.bin) 及 ASDM image (asdm-501.bin)

二.設定 PIX
1.PIX 重新開機後按下 BREAK 或 ESC 中斷開機程序
2.interface 1 //設定 PIX 使用的網路界面
3.address 192.168.1.2 //設定 PIX interface 1 IP
4.server 192.168.1.1 //設定TFTP 伺服器 IP
5.file pix701.bin //指定 TFTP Server上 IOS 名稱
6.tftp //開始從 TFTP 伺服器傳送 IOS 影像檔,完成後 PIX 會重新開機

三、正常開機後再使用 copy tftp flash 指令,將 IOS image 複製至 flash 上即可

相關參考資料
http://www-tss.cisco.com/eservice/compass/common/activities/password_PIX.htm

2009年9月18日 星期五

LEAF使用USB Flash Disk 開機

一、解開掛載 initrd.lrp
mv initrd.lrp initrd.gz
gunzip initrd.gz
insmod loop.o (module.tgz 中 xx.xx./block/ 下)
mount initrd /initrd

二、確認 USB 相關模組已載入以下模組
相關路徑及檔案:/initrd/boot/lib/module/、/initrd/boot/etc/modules
ide-core
usbcore
usb-uhci / usb-ohci / ehci-hcd
scsi_mod
usb-storage
sd_mod
vfat

三、部份設備 USB 裝置必須比較久的偵測時間,修改 /initrd/linuxrc 中 usb_wait 的等待時間

四、若有修改重新製作 initrd
gzip -v9c initrd > initrd.gz
mv initrd.gz initrd.lrp

2009年9月11日 星期五

CISCO PIX IOS 升級更新

1.架設 TFTP Server
將 pix701.bin及asdm-501.bin放入 TFTP伺服器 目錄中
TFTP 伺服器 IP 為 10.0.0.1

2.更新IOS
pixfirewall# copy tftp flash
Address or name of remote host [0.0.0.0]? 10.0.0.1
Source file name [cdisk]? pix701.bin
copying t[url]ftp://10.0.0.1/pix701.bin[/url] to flash:image
[yes|no|again]? yes
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Received 5124096 bytes
Erasing current image
Writing 5066808 bytes of image
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pixfirewall# reload
Proceed with reload? [confirm]

重新開機會久一點,不要任意關棧會造成更新失敗,導致無法開機
完成開機後,原有設定也會套用

3.更新 ASDM
pixfirewall# copy tftp flash
Address or name of remote host []? 10.0.0.1
Source filename []? asdm-501.bin
Destination filename [asdm-501.bin]?
Accessing t[url]ftp://10.0.0.1/asdm-501.bin[/url]...!!!!!!!!!!!!!!!!!!!!!!!!!
Writing file flash:/asdm-501.bin...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5919340 bytes copied in 85.610 secs (69639 bytes/sec)

pixfirewall# reload
Proceed with reload? [confirm]
重新開機後即完成更新,原有設定也會套用

Windows XP下CPL副檔名相關指令

access.cpl 協助工具選項
appwiz.cpl 新增或移除程式
desk.cpl 顯示內容
firewall.cpl Windows 防火牆
hdwwiz.cpl 新增硬體精靈
inetcpl.cpl 網際網路內容
intl.cpl 地區及語言選項
irprops.cpl 無線連結
iscsicpl.cpl iSCSI Initiator 內容
joy.cpl  遊戲控制器
jpicpl32.cpl JAVA控制面板
main.cpl  滑鼠內容
mmsys.cpl 聲音及音訊裝置內容
ncpa.cpl 網路連線
netsetup.cpl 無線網路安裝精靈
nusrmgr.cpl 使用者帳戶
odbccp32.cpl ODBC資料來源管理員
powercfg.cpl 電源選項內容
sysdm.cpl 系統內容
telephon.cpl 電話和數據機選項
timedate.cpl 日期和時間內容
wscui.cpl windows 資訊安全中心
wuaucpl.cpl 自動更新

Windows XP 下 MSC副檔名相關指令

admgmt.msc Active Directory管理 
azman.msc 授權管理員 
certmgr.msc 憑證 
certsrv.msc 憑證授權 
certtmpl.msc certtmpl憑證範本 
ciadv.msc Indexing Service 
comexp.msc 元件服務 
compmgmt.msc 電腦管理 
devmgmt.msc 裝置管理員 
dfrg.msc 磁碟重組工具 
dfsgui.msc 分散式檔案系統 
dhcpmgmt.msc DHCP 
diskmgmt.msc 磁碟管理 
dnsmgmt.msc dnsmgmt 
domain.msc Active Directory網域及信任 
dsa.msc  Active Directory使用者及電腦
dssite.msc Active Directory 站台及服務 
eventvwr.msc 事件檢視器 
fsmgmt.msc 共用資料夾 
gpedit.msc 群組原則 
iis.msc  Internet Information Services
ipaddrmgmt.msc IP位址管理 
lusrmgr.msc 本機使用者和群組 
mscorcfg.msc .NET Configuration 
ntmsmgr.msc 卸除式存放裝置 
ntmsoprq.msc 卸除式存放裝置操作員要求 
perfmon.msc 效能 
pkmgmt.msc 公開金鑰管理 
rsadmin.msc 遠端存放 
rsop.msc 原則結果組 
schmmgmt.msc schmmgmt 
secpol.msc 本機安全性設定 
services.msc 服務 
tapimgmt.msc 電話語音 
tsmmc.msc 遠端桌面 
uddi.msc UDDI服務主控站 
winsmgmt.msc WINS 
wmimgmt.msc Windows Management Infrastructure

2009年7月27日 星期一

Juniper NS-5GT-108 恢復預設密碼

使用以下方法將會遺失設定組態,但也會將裝置的預設值還原。
以 CONSOLE 方式連接(參閱 NetScreen CLI Reference Guide 和安裝程式指南)。
1. 在登入提示下,鍵入裝置的序號。

2. 在密碼提示下,再度鍵入序號。
會出現下面的訊息:
!!!! Lost Password Reset !!!! You have initiated a command to reset the device to factory defaults, clearing all
current configuration, keys and settings. Would you like to continue? y/n

3. 按 Y 鍵。
會出現下面的訊息:
!! Reconfirm Lost Password Reset !! If you continue, the entire configuration of the device will be erased. In
addition, a permanent counter will be incremented to signify that this device has been reset. This is your last
chance to cancel this command. If you proceed, the device will return to factory default configuration, which is: System IP: 192.168.1.1; username: netscreen; password: netscreen. Would you like to continue? y/n

4. 按 Y 鍵以重設裝置。
現在可以用 netscreen 作為預設使用者名稱和密碼來登入。

2009年7月14日 星期二

Windows 2K3 Telnet 服務不見

安裝 Microsoft (Windows) Server 2003 Service Pack 1 (SP1)] 或 [的 x x64 版本 」 (Windows Server 2003 之時,可能會遇到下列問題:
「 Telnet 」 服務不在 [服務] 主控台 (services.msc) 中。

修正方法:
命令列中輸入 tlntsvr /service 安裝 Telnet

詳情見 http://support.microsoft.com/kb/899260

2009年6月23日 星期二

XHTML 1.0 檢查表

1.將DOCTYPE改為嚴格版的HTML。

2.把xmlns、lang和xml:lang屬性加到<html>

3.<html>必須是DOCTYPE之後的第一個標籤,

4.</html>必須是文件的最後一個標籤。

5.所有元素名稱都必須是小寫。

6.所有起始標籤都必須有結束標籤。

7.空元素都要以/> 作結束。

8.所有屬性值都以“ 框住,且一定要含有數值。

9.不可以在HTML內使用&。

W3C HTML檢查網址 http://validator.w3.org

從嚴格版HTML轉換到XHTML 1.0

1.將DOCTYPE改為嚴格版XHTML。
<!DOCTYPE html PUBLIC “-//W3C//DTD/XHTML 1.0 Strict//EN”http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>

2.把xmlns、lang和xml:lang屬性加到<html>元素
<html xmlns=http://www.w3.org/1999/xhtml lang=“en” xml:lang=“en”>

3.所有空元素都要以/> 作結束。

將10進位整數轉換成以 char 表示


//將10進位整數轉換成以 char 表示
function int2char($ints){
$d = array();
do {
array_unshift($d, $ints % 256);
$ints = (int) ($ints/256);
} while($ints>256);
if($ints > 0) array_unshift($d, $ints % 256);

$s = '';
for($i=0; $i<sizeof($d); $i++)
$s .= chr($d[$i]);

return $s;
}

2009年6月22日 星期一

CISCO Catalyst 3560 + MS Windows IAS 802.1X認證

IEEE 802.1x port based 認證方式摘要
1.現行乙太網路的標準中,對內部網路使用者認證方法。
2.所有網路端點及交換器皆具備此一功能才可執行。
3.此認證方式以交換器實體連接介面埠為單位,若有一個使用者認證通過,則連接介面完全打通。
4.當該介面下接一般舊型交換器或無線AP 時,則無法驗證多個使用者,因為一人通過,其餘使用者皆可上線。

一、設定交換器
802.1X的設定
aaa new-model
aaa authentication dot1x default group radius
dot1x system-auth-control

RADIUS伺服器的設定
radius-server host 192.168.19.180 key abc123

各埠口的設定
interface gigabitEthernet 0/1
switchport mode access
dot1x port-control auto

參考資料
http://www.cisco.com/en/US/docs/switches/lan/catalyst3560/software/release/12.1_19_ea1/configuration/guide/sw8021x.pdf

二、安裝IAS
控制台->新增或移除程式



三、設定IAS
1.新增RADIUS用戶端



共用密碼必須和交換器設定中的一致


2新增一個存取原則




以使用者帳號或群組為單位設定可使用的帳號,設定下一步完成設定





四、Windows Server設定
若是使用Windows 網域帳號作認證,必須作以下設定
1.AD中登錄伺服器


2.啟用使用可回復加密來存放密碼


3.確定網域群組原則使用可回復加密來存放密碼。
4.已有的帳號密碼若無使用可回復加密來存放密碼,必須先設定使用可回復加密來存放密碼後,重設密碼才可生效。

五、Windows Client端電腦連線設定


連結上網路後出現輸入帳號密碼訊息

若非使用網域帳號認證,使用者名稱必須加上IAS主機名稱即:IAS-Name\UserName

2009年6月4日 星期四

Windows AT 指令

AT 命令排定某些命令或程式在某個特定的日期和時間,在電腦上執行。
執行 AT 命令之前必須先啟動 Schedule 服務。

AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]  [ /EVERY:date[,...] | /NEXT:date[,...]] "command"

參數說明
參數說明
\\computername指定遠端電腦。如果省略這個參數,命令會被排定在本機上執行。
id指定給排定時程命令的識別碼。
/delete刪除某個已排程的命令。如果省略 id,所有電腦上已排程的 命令都會被刪除。
/yes用於刪除所有已排程的工作,且不想在執行刪除時顯示確認訊息使用。
time 指定命令執行的時間。時間格式 hh:mm  
/interactive       允許工作在執行時,與當時登入的用戶互動。
/every:date[,...] 指定在每週或每月的某日 (或某幾日) 執行命令。如果省略日期,則預設為在每月的本日執行。
date參數說明:
每週的指定方式:
星期天 : 日
星期一 : 一
星期二 : 二
星期三 : 三
星期四 : 四
星期五 : 五
星期六 : 六
每個月的那一天:1,2,3 ... 31
 /next:date[,...]  指定在下一次的指定日期 (如,下週三) 時,執行命令。如果省略日期,則預設為在每月的本日執行。
"command"準備執行的 Windows NT 命令或批次檔。

範例:
一、每週星期一、二 23:30 執行 cmd.bat
AT 23:30 /every:一,二 cmd.bat

二、每個月 1、15 號23:30 執行 cmd.bat
AT 23:30 /every:1,15 cmd.bat

三、每個月15,及每個星期日 23:30 執行 cmd.bat
AT 23:30 /every:日,15 cmd.bat

2009年5月21日 星期四

ssh 免輸入帳號密碼

Server A 至 Server B 不用輸入帳號密碼

Server A上的設定
ssh-keygen -t rsa 或 ssh-keygen -d (dsa) => 產生出 id_rsa, id_rsa.pub
scp id_rsa.pub ServerB:~/.ssh/

Server B上的設定
cat .ssh/id_rsa.pub >> .ssh/authorized_keys

懶人作法
ssh-keygen
cd .ssh
cp id_rsa.pub authorized_keys
scp -r .ssh  hostname:

2009年5月14日 星期四

PHP 使用 WWW-Authenticate 方式來認證身份

PHP 認證亦可以使用 WWW-Authenticate 方式來認證身份


範例程式如下:

<?php
$user = 'user';
$pw = 'pw';


if(!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_PW']=='') {
    Header("WWW-Authenticate: Basic realm=\"login\"");
    Header("HTTP/1.0 401 Unauthorized");
    die('認證失敗');
} else {
    if($_SERVER['PHP_AUTH_USER']!=$user || $_SERVER['PHP_AUTH_PW']!=$pw) {
        Header("WWW-Authenticate: Basic realm=\"login\"");
        Header("HTTP/1.0 401 Unauthorized");
        die('帳號或密碼錯誤');
    }
}


//認證成功以後要作的工作
echo "認證成功";

2009年4月23日 星期四

PHP 錯誤處理-自定處理函式

set_error_handler() - 指定一個自定函式作為 PHP 錯誤處理的函式。

這個函式是用來告知 PHP 引擎,我們所自定的錯誤處理函式的名稱,自定的錯誤處理函式的名稱可以自行命名,但必須遵守以下傳入變數的次序及數量。

function ErrorHandler($type, $msg, $file, $line){

}

範例:
<?php
function ErrorHandler($type, $msg, $file, $line){
printf("$type, $msg, $file, $line, 除數不可為 0\n");
}

set_error_handler('ErrorHandler');
printf("%d\n", 1/0);
?>

輸出結果:
2, Division by zero, /var/www/html/error1.php, 7, 除數不可為 0 0

PHP 錯誤處理-錯誤等級相關函式 error_reporting

error_reporting()  - 指定PHP程式只需要回報的錯誤等級其他的一律忽略。

參數說明:

Value

Constant

Description

Note

1E_ERROR執行時期致命的錯誤
2E_WARNING執行時期錯誤警告
4E_PARSE編譯時的程式剖析錯誤
8E_NOTICE執行時期的提醒
16E_CORE_ERRORPHP 引擎啟動執行時產生的致命錯誤
32E_CORE_WARNINGPHP 引擎啟動執行時產生的警告since PHP 4
64E_COMPILE_ERROR致命的編譯時錯誤since PHP 4
128E_COMPILE_WARNING致命的編譯時警告since PHP 4
256E_USER_ERROR使用者定義的錯誤since PHP 4
512E_USER_WARNING使用者定義的警告since PHP 4
1024E_USER_NOTICE使用者定義的提醒since PHP 4
2048E_STRICT編碼標準化警告(建議如何修改以向前兼容)since PHP 5
4096E_RECOVERABLE_ERROR接近致命的運行時錯誤,若未被捕獲則視同E_ERRORsince PHP 5.2.0
8192E_DEPRECATEDRun-time notices. Enable this to receive warnings about code that will not work in future versions. since PHP 5.3.0
16384E_USER_DEPRECATEDUser-generated warning message. This is like an E_DEPRECATED, except it is generated in PHP code by using the PHP function trigger_error(). since PHP 5.3.0
30719E_ALL所有的錯誤、警告32767 in PHP 6, 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously




範例:
1/0 會產生一個 WARNING 的錯誤等級,先將程式錯誤等級設為 E_ERROR ,則不會有錯誤訊息出現,因為已經被忽略了。
<?php
error_reporting(E_ERROR);
printf("%d\n", 1/0);

error_reporting(E_WARNING);
printf("%d\n", 1/0);
?>



輸出結果:
0
Warning: Division by zero in /var/www/html/error1.php on line 6
0

參考文件:
http://tw2.php.net/manual/en/errorfunc.constants.php#errorfunc.constants.errorlevels.e-error

PHP 錯誤處理

PHP 程式的錯誤包含兩種類型:
1.程式編譯時發生的錯誤。
2.程式執行時發生的錯誤。
引起錯誤的原因可能是執行環境所導致的錯誤或者是程式中語法、語意或是邏輯的錯誤。

PHP 的錯誤處理可以處理直譯過程的語法、語意錯誤,或執行時的程式錯誤。PHP 4.0版之前即提供錯誤處理的機制,當程式發生錯誤時,可以提供不同的錯誤處理方式。

PHP 錯誤處理的4種等級:
1.Parser Errors:PHP程式碼語法和語意錯誤。
2.Fatal Errors:執行時間嚴重的錯誤,PHP引擎會停止執行程式。
3.Warnings:警告錯誤,PHP引擎會試圖繼續執行程式。
4.Notices:提醒程式碼可能出現的錯誤。

2009年4月3日 星期五

使用 IMAP 伺服器作身份認證

<?php
//使用 IMAP 伺服器作身份認證
$server = 'imap-server';
$port = '143';
$userid = 'userid';
$password = 'password';

//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');

//檢查 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"* OK")!=0) die('IMAP 伺服器連線失敗');

//傳送帳號密碼
fputs($fp, ". login $userid $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"* OK")!=0) die('帳號密碼錯誤');
else echo '認證成功';

fputs($fp, ". LOGOUT\r\n");
$msg = fgets($fp,256);

fclose($fp);
?>

2009年4月2日 星期四

使用 POP3 伺服器作身份認證

<?php
//使用 POP3 伺服器作身份認證
$server = 'pop3server';
$port = '110';
$userid = 'userid';
$password = 'password';

//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');

//檢查 POP3 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"+OK")!=0) die('POP3 伺服器連線失敗');

//傳送帳號
fputs($fp, "USER $userid\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) die('帳號錯誤');

//傳送密碼
fputs($fp, "PASS $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) return die('密碼錯誤');
else echo '認證成功';

fputs($fp, "QUIT\r\n");
$msg = fgets($fp,256);

fclose($fp);
?>

參考文件
http://yu-minspace.blogspot.com/2009/04/rfc1939-pop3.html

RFC1939-POP3協定摘要

POP3伺服器
1.POP3伺服器偵聽 TCP 埠口 110。
2.當客戶主機需要使用服務時,它將與伺服器建立TCP連接。
3.當連接建立,POP3發送確認消息。客戶和POP3服務器相互(分別)交換命令和回應,這一過程一直要持續到連接終止。

POP3伺服器和客戶端的運作
1.在生命周期中,POP3會話有幾個不同的狀態(確認、操作及更新)。
2.一旦TCP連接被打開,而且POP3服務器發送了確認信息,此過程就進入了"確認"狀態。在此狀態中,客戶必須向POP3服務器確認自己是其的客戶。一旦確認成功,服務器就獲取與客戶郵件相關的資源,此時這一過程進入了"操作"狀態。在此狀態中,客戶提出服務,當客戶發出QUIT命令時,此過程進入了"更新"狀態。在此狀態中,POP3服務器釋放在"操作"狀態中取得的資源,並發送消息,終止連接。

POP3命令及訊息的交換
1.POP3命令由一個命令和一些參數組成。
2.所有命令以一個CRLF結束。
3.命令和參數由可顯示的ASCII字元組成,由空格間隔。
4.命令一般是三到四個字母,每個參數長度可達40個字元長度。
5.在發送第一行回應和一個CRLF之後,任何的附加信息行發送也由CRLF結束。
6.當所有信息發送結束時,發送最一行,包括一個結束字符(十進制碼46,也就是".")和一個CRLF。
7.如果信息中的任何一行以結束字符開始,此行就是通過在那一行預先裝入結束而進行字符填充的。因此,多行回應由五個CRLF.CRLF 結束。
8.當檢測多行回應時,客戶檢測以確認此行是否以結束字符開始。如果是的,而且其的字符不是CRLF,此行的第一個字符(結束字符)將被拋棄;如果其緊跟CRLF,從POP服務器來的回應終止,包括.CRLF 的行也不被認為是多行回應的一部分了。

一、基礎的POP3命令:

指令名稱

說明狀態
USER name送出帳號名稱確認
PASS string 送出帳號密碼確認
QUIT 結束POP3連線作業確認、操作、更新
STAT傳回信件狀況操作
LIST [msg]

列出信件大小

【參數】信件編號

操作
RETR msg

傳回信件內容

【參數】信件編號

操作
DELE msg

刪除指定信件

【參數】信件編號

操作
NOOP NOOP操作
RSET重設信件狀態操作


二、可選的POP3命令:
指令名稱說明
狀態
APOP name digest

使用 name digit md5 方式取代 USER/PASS 方式作確認

【參數】指定郵箱的字串和MD5摘要串。
【限制】僅在POP3確認的"確認"狀態中使用。

確認
TOP msg n

傳回信件指定行數的內容

【參數】一個是未被標記為刪除的信件數,另一個是非負數(必須提供),如果要求的行數比信件體中的行數大,會發送整個信件。

操作
UIDL [msg]

傳回信件序號

【參數】信件數(可選)。如果給出信件數,不包括被標記為刪除的信件。

操作


三、POP3 回應:
1.POP3回應由一個狀態碼和一個可能跟有附加信息的命令組成。
2.所有回應也是由 CRLF 結束。
3.有兩種狀態碼,"成功" ("+OK") 和 "失敗" ("-ERR")。
4.對特定命令的回應是由許多字符組成的。
5.除了STAT,LIST和UIDL的回應外,其它命令的回應均為"+OK"和 "-ERR"。

參考文件 http://www.ietf.org/rfc/rfc1939.txt

2009年4月1日 星期三

LEAF 設定VPN 摘要

VPN 需要載入 ip_gre.o 模組,才能傳送 tunnel(gre) 封包

2009年3月27日 星期五

VIM 如何正確顯示 UniCode或其他編碼

要切換編碼 utf-8 ,只要在命令模式鍵入
:set encoding=utf-8

vim 的指令也有縮寫
se = set
enc = encoding
utf8 = utf-8
因此上面的指令可以簡短成 se enc=utf8

如果不想每次都設定,也可以在 ~/.vimrc 設定檔中加入底下幾行即可解決:set encoding=utf-8

更多相關的設定,命令列輸入 :help

Linux mount FreeBSD 檔案系統

確定核心有支援 ufs 後使用以下指令範例:
mount -t ufs -o rw,ufstype=44bsd /dev/sda1 /mnt
mount -t ufs -o ro,ufstype=44bsd /dev/sda1 /mnt

REDHAT ES4 新增 POP3 服務

安裝 dovecot-0.99.11-2.EL4.1.i386.rpm

修改設定檔 /etc/dovecot.conf
修改 #protocols = imap imaps
---> protocols = pop3

修改 pop3_listen = [::]
---> pop3_listen = *

啟動服務 /etc/init.d/dovecot start

2009年3月23日 星期一

IBM X346 BMC 設定筆記

BMC 說明摘要:
1.BMC Baseboard Management Controller)。
2.伺服器在開機時載入BIOS時會執行硬體檢測,但當開機完成,運行一段時間後,若伺服器硬體週邊等發生故障時,要如何監測?BMC即是提供這種功能,從某個角度可以定義有BMC功能的即是伺服器,沒有的則是PC。
3.目前可以使用 BMC 透過網路來監控伺服器。

IBM X346 BMC功能有限,比較有用的功能在於控制主機的電源,相關指令如下:
identify 控制面板標示的LED
sysinfo 顯示目前系統的訊息
power 顯示、控制電源的開關
sel 顯示、刪除sel訊息

IBM X346 BMC 設定步驟如下:
一.BIOS設定BMC的相關設定
按F1進入BIOS,Advance->設置BMC IP
設定 SOL(Serial over LAN ) 功能: Advanced Options,Baseboard Management Controller (BMC) Settings:
– System-BMC Serial Port Sharing 設為 Enabled
– BMC Serial Port Access Mode 設為 Dedicated Devices and I/O Ports,作如下設定:
– 將Serial Port A 設為 Auto-configure。 Remote Console Redirection,作如下設定:
– Remote Console Active 設為 Enabled
– Remote Console Text Emulation 設為 VT100/VT220
– Remote Console Keyboard Emulation 設為 VT100/VT220
– Remote Console Active After Boot 設為 Enabled
– Remote Console Flow Control 設為 Hardware

windows 命令行下,檢查配置 進行相關如下:bootcfg /ems on /port com1 /baud 19200 /id 1;
注意參數與BIOS設置一致

二.連結網路,BMC的網路界面通常和第一個網路界面共用(通常是離電源供應器比較近的那一個)。

三.安裝 SMBridge 軟體 下載 System Management Bridge Baseboard Management Controller CLI and Remote Console Utility - Servers
http://www-947.ibm.com/systems/support/supportsite.wss/docdisplay?lndocid=MIGR-57729&brandind=5000008

可以任意安裝在某一部機器上,安裝完成以後,有以下檔案:
1.pxyservice.exe 服務程式
2.pxyservice.ini 一般不需要配置
3.SMBridge.exe SMBridge 處理程式。
4.smbridge.cfg
///////////////////////////////////
ip=127.0.0.1
port=623
session_timeout=30
power_off_timeout=60
其中IP設置SMBridge監聽IP, INADDR_ANY 為任意;
127.0.0.1 只允許本機;
ip:監聽一個具體IP;
PORT為監聽埠,預設為623。
/////////////////////////////////

執行pxyservice.exe,即可啟動SMBridge服務。

四、使用 TELNET 127.0.0.1 623 即可登入 SMBridge
1.登入 SMBridge 可以使用 connect 指令連結到想監控的伺服器。
2.IBM X346 BMC 的預設帳號密碼是 USERID / PASSW0RD
3.也可以使用SMBridge.exe命令直接連結支援BMC的伺服器進行管理。如:
smbridge -ip 192.168.0.100 -u USERID -p PASSW0RD sysinfo

參考文件:
http://www-01.ibm.com/support/docview.wss?uid=csc1ee9270bad8fe13c54825738600326ced
http://www.ixpub.net/archiver/tid-687984-page-1.html
http://www-900.ibm.com/cn/support/download/driver/detail?DocId=JJLU-6HHBQF
http://hi.baidu.com/telpublic/blog/item/1f3aa513788f57d3f6039ee6.html

2009年1月9日 星期五

PHP函式 htmlspecialchars 和 htmlentities 差別

htmlspecialchars 、htmlentities 這兩個函數基本功能差不多,但有細微的差異。

1.htmlspecialchars只轉化下面這幾個html代碼
‘&’ (ampersand) becomes ‘&’
‘”‘ (double quote) becomes ‘”‘ when ENT_NOQUOTES is not set.
”’ (single quote) becomes ”’ only when ENT_QUOTES is set.
‘<’ (less than) becomes ‘<’
‘>’ (greater than) becomes ‘>’

2.htmlentities 會轉化所有的html代碼,若字串中只有英文、數字則兩個函式結果相同,若是其中含有無法識別的中文字結果就不同了,中文字也會被轉換了。

一個簡單的例子來做比較:
<?php
$str='<a href="test.html">測試頁面</a>';
echo htmlentities($str);
echo "<br>";
echo htmlspecialchars($str);
?>

輸出結果如下:
<a href="test.html">測試é ?é?¢</a>
<a href="test.html">測試頁面</a>