十二月 20

RouterOS要更新版本除了可以手動更新外(請參考更新與升級RouterOS的版本),也可以利用Script來進行更新。

參考mikrotik官方的wiki後,我把Script修改了一下,方便使用。

要使用前,要修改的地方只有1個:local upgradeTo "5.11",

把版本改成你想要更新的版本即可,例如:local upgradeTo "5.13"

執行後,Script會自動去官方網站下載符合該平台的更新檔下來,

下載完會自動重開機進行更新。

請注意:系統更新都有其風險,更新前請自行斟酌

#Script在RouterOS 5.7中測試過
#Date:2011/12/20
#Script Descript:半自動更新RouterOS的系統版本
#reference:http://wiki.mikrotik.com/wiki/Auto_upgrade_script_V3.x

#----------------------------------
#要更新到那一個版本請在這邊設定
:local upgradeTo "5.11";
#----------------------------------

# newest version
:local lMajor;
:local lMinor;

# current version
:local vMajor;
:local vMinor;

:local myVer [/system resource get version];

:for i from=0 to=([:len $myVer] - 1) do={ 
 :if ( [:pick $myVer $i] = ".") do={
  :set vMajor [:tonum [:pick $myVer 0 $i]];
  :set vMinor [:tonum [:pick $myVer ($i + 1) [:len $myVer]]] ;
 }
}
......以下略

完整程式碼可參考http://www.minitw.com/download/UpgradeROS.txt

懶人包如下,於Winbox下開一個新的New Terminal後,貼上下面的code
接下來就可以在System -> Script裡面找到名叫 UpgradeROS 的Script

/system script
add name=UpgradeROS policy="ftp,reboot,read,write,policy,test,winbox,pass\
    word,sniff,sensitive,api" source="#Script\A6bRouterOS 5.7\A4\A4\B4\FA\
    \B8\D5\B9L\r\
    \n#Date:2011/12/20\r\
    \n#Script Descript:\A5b\A6\DB\B0\CA\A7\F3\B7sRouterOS\AA\BA\A8t\B2\CE\
    \AA\A9\A5\BB\r\
    \n#reference:http://wiki.mikrotik.com/wiki/Auto_upgrade_script_V3.x\r\
    \n\r\
    \n#----------------------------------\r\
    \n#\ADn\A7\F3\B7s\A8\EC\A8\BA\A4@\AD\D3\AA\A9\A5\BB\BD\D0\A6b\B3o\C3\
    \E4\B3]\A9w\r\
    \n:local upgradeTo \"5.11\";\r\
    \n#----------------------------------\r\
    \n\r\
    \n# newest version\r\
    \n:local lMajor;\r\
    \n:local lMinor;\r\
    \n\r\
    \n# current version\r\
    \n:local vMajor;\r\
    \n:local vMinor;\r\
    \n\r\
    \n:local myVer [/system resource get version];\r\
    \n\r\
    \n:for i from=0 to=([:len \$myVer] - 1) do={  \r\
    \n\t:if ( [:pick \$myVer \$i] = \".\") do={ \r\
    \n\t\t:set vMajor [:tonum [:pick \$myVer 0 \$i]]; \r\
    \n\t\t:set vMinor [:tonum [:pick \$myVer (\$i + 1) [:len \$myVer]]] ;\
    \r\
    \n\t}\r\
    \n}\r\
    \n\r\
    \n:if (\$vMajor < 3) do={\r\
    \n\t:log warning \"RouterOS version too old (\$vMajor.\$vMinor),  upd\
    ate script not compatible.RouterOS\AA\A9\A5\BB\A4\D3\C2\C2\A1A\A4\A3\
    \A4\E4\B4\A9V3\A5H\A4U\AA\BA\AA\A9\A5\BB\";\r\
    \n} else={ \r\
    \n\r\
    \n#      \A8\FA\B1o\A5\BB\A5\AD\A5x\AA\BA\BA\D8\C3\FE (architecture-n\
    ame is not available in older 3.x versions)\r\
    \n       :local platform [/system resource get architecture-name];\r\
    \n\r\
    \n#      \B3]\A9w\AA\A9\A5\BB\r\
    \n       :local lVer \$upgradeTo;\r\
    \n\r\
    \n\t:for i from=0 to=([:len \$lVer] - 1) do={  \r\
    \n\t\t:if ( [:pick \$lVer \$i] = \".\") do={ \r\
    \n\t\t\t:set lMajor [:tonum [:pick \$lVer 0 \$i]]; \r\
    \n\t\t\t:set lMinor [:tonum [:pick \$lVer (\$i + 1) [:len \$lVer]]] ;\
    \r\
    \n\t\t}\r\
    \n\t}\r\
    \n\r\
    \n\t:if ((\$vMajor = \$lMajor) && (\$vMinor < \$lMinor)) do={\r\
    \n\t\t:local pckgName \"routeros-\$platform-\$lMajor.\$lMinor.npk\";\
    \r\
    \n#\B3]\A9w\ADn\A4U\B8\FC\AA\BA\A6\EC\B8m\r\
    \n\t\t/tool fetch address=[:resolve \"download2.mikrotik.com\"] host=\
    \"download2.mikrotik.com\" mode=http src-path=\"/\$pckgName\";\r\
    \n\t\t:log info \"Upgrade_script: \A8t\B2\CE\A7Y\B1N\A7\F3\B7s\AA\A9\
    \A5\BB Ver\$upgradeTo\";\r\
    \n\t\t/system reboot;\r\
    \n\t} else={\r\
    \n                :log info \"Upgrade_script: already latest version.\
    \A8t\B2\CE\A4w\B8g\ACO\B7s\AA\BA\AA\A9\A5\BB Ver\$myVer\";\r\
    \n        }\r\
    \n}"




九月 19

SHA加密有很多種版本,像是SHA1、SHA256....等

下面用一個Function來實作.NET中所有的SHA加密

using System;
using System.Security.Cryptography;
using System.Text;

namespace SystemAPI.Function.EncryptLibrary
{
    public class EncryptSHA
    {
        /// <summary>
        /// 使用SHA加密訊息
        /// </summary>
        /// <param name="sourceMessage">原始資訊</param>
        /// <param name="SHAType">SHA加密方式</param>
        /// <returns>string</returns>
        public string Encrypt(string sourceMessage, EnumSHAType SHAType)
        {
            if (string.IsNullOrEmpty(sourceMessage))
            {
                return string.Empty;
            }

            //字串先轉成byte[]
            byte[] Message = Encoding.Unicode.GetBytes(sourceMessage);
            HashAlgorithm HashImplement = null;

            //選擇要使用的SHA加密方式
            switch (SHAType)
            {
                case  EnumSHAType.SHA1:
                    HashImplement = new SHA1Managed();
                    break;
                case EnumSHAType.SHA256:
                    HashImplement = new SHA256Managed();
                    break;
                case EnumSHAType.SHA384:
                    HashImplement = new SHA384Managed();
                    break;
                case EnumSHAType.SHA512:
                    HashImplement = new SHA512Managed();
                    break;
            }

            //取Hash值
            byte[] HashValue = HashImplement.ComputeHash(Message);

            //把byte[]轉成string後,再回傳
            return BitConverter.ToString(HashValue).Replace("-","").ToLower();

        }

        public enum EnumSHAType
        {
            SHA1,
            SHA256,
            SHA384,
            SHA512
        }

    }
}

.
使用方式如下:

EncryptSHA SHA = new EncryptSHA();
string EncryptString = SHA.Encrypt("12345", EncryptSHA.EnumSHAType.SHA512);




九月 01

正常的狀況下,RouterOS會自動管理系統上的IP位置。

像是使用VPN撥接上ROS後,ROS系統會自動給予1個IP位置,斷線後該IP位置會自動刪除。

但有的時候,撥接上來的VPN發生異常斷線後,該IP並沒有自動刪除。

這時就會導致該帳號永遠無法再撥接上來(帳號使用固定VPN IP)

為了解決這狀況,所以需要一個小Script搭配Scheduler來自動刪除ROS上這些無效的IP位置

Script內容如下

#Script TestOS:RouterOS 5.6
#Date:2011/09/01
#Script Description:刪除無效的IP位置

# 把無效的IP位置資料全部讀出來
:foreach i in=[/ip address find invalid=yes] do={
#刪除無效的IP
    /ip address remove $i
}

.
.
懶人包如下,於winbox中開啟Terminal,貼上下面的指令
系統會完成新增上面的Script並每5分鐘於Scheduler中自動執行1次

/system script
add name=DeleteInvalidIP policy=\
    ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api source="#Script T\
    estOS:RouterOS 5.6\r\
    \n#Date:2011/09/01\r\
    \n#Script Description:\A7R\B0\A3\B5L\AE\C4\AA\BAIP\A6\EC\B8m\r\
    \n\r\
    \n# \A7\E2\B5L\AE\C4\AA\BAIP\A6\EC\B8m\B8\EA\AE\C6\A5\FE\B3\A1\C5\AA\A5X\A8\D3\r\
    \n:foreach i in=[/ip address find invalid=yes] do={\r\
    \n#\A7R\B0\A3\B5L\AE\C4\AA\BAIP\r\
    \n    /ip address remove \$i  \r\
    \n}"

/system scheduler
add disabled=no interval=5m name=AutoDeleteIP on-event=\
    "/system script run DeleteInvalidIP" policy=\
    ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api start-date=\
    aug/19/2011 start-time=02:08:36




八月 25

終於...Defy with CM7 有完美的雙向錄音了(非擴音)

自已測試過,聲音真的很清楚

系統:CyanogenMod-7-110817-1717-NIGHTLY-Jordan (CM7)

錄音軟體:AutoCallRecorder

要使用完美的雙向錄音要先刷修正檔RecordFixByJoe0821_OnlyFix.zip(本站分流)

刷機方法:

1.下載RecordFixByJoe0821_OnlyFix.zip,並記得下載到那一個資料夾去了
2.重新開機,在MOTO的LOGO出現時,注意LED,在亮藍燈時,快速按下「音量的下鍵」,此時會進入的BootMenu
3.先選*Recovery--> 再選 [Latest Recovery]
4.此時會進入Recovery V4.X.X.X-DEFY
5.選Install zip from sdcard
6.進入choose zip from sdcard
7.進入後選擇剛剛下載RecordFixByJoe0821_OnlyFix.zip的位置,並且安裝該檔案
8.完成後,重新開機
9.接下來你可以用market上的錄音軟體來進行雙向通話錄音了。





七月 31

一直以來好像很少看到升級RouterOS的文章

今天就記錄一下過程吧

首先是先下載RouterOS的升級npk檔

可以到官方網站下載

如果你需要之前的版本,可以到本站的這邊下載

依照自已的RouterOS系統別下載好後,打開winbox

20110731_1

把升級的npk檔拖到winbox的Files中

20110731_2

檔案上傳中.....

20110731_3

確認檔案上傳完成

20110731_4

重開RouterOS

20110731_4_1

選擇確定重開後,會花一點時間,此時請勿關閉電源。開機完成後,系統即完成升級

20110731_5