2015年2月24日 星期二

Tomato by Shibby之Access Restriction失效問題

為了限制部分電腦只能於特定時間上網
找了部Tenda N6改成Tomato by Shibby

設定Access Restriction功能後測試  無效!!!

電腦的IP位址已經被鎖了,卻仍可上網

挖出用過沒問題的無線路由器來比對

兩台路由器只有韌體版本不同

新: Tomato Firmware 1.28.0000 MIPSR2-124 K26 Max
舊: Tomato Firmware 1.28.0000 MIPSR2-123 K26 Max

直接將Tenda N6降版到123沒改設定,功能生效了

結論: 目前最新版v1.28 build 124的部分功能有問題

Function "Access Restriction" does not work properly in Tomato by Shibby v1.28 build 124. Pretty sure it's a bug in latest version because the same setting works after I downgrade firmware to v1.28 build 123.


2015年2月11日 星期三

kamailio IPv6運作超難搞 (失敗收場)


如果你想試試SIP/IPv6,很可能會搜尋到這篇文章:
Run your own SIP VoIP service on both IPv4 and IPv6


讀來如此簡單而美好

花兩天時間試過裝在以下各VM
CentOS 6.3 x86 (source編譯安裝)
Debian 7.7.0 i386 (source編譯安裝)
Debian 6.0.4 i386 (source編譯安裝)
Debian 7.0.0 i386 (直接從repo用apt-get安裝)

全部同樣的情況:
IPv4幾乎不需要設定就能動
IPv6怎麼設定5060 port都不收封包 (netstat確定有listen)

怎麼送封包給kamailio,只有下面這個系統回應
ICMPv6 Destination Unreachable (Port unreachable)

功力太淺,放棄

(kamailio has put me in hell for two days. too tired now to write in English..... 
my suggestion to the ones who got the same ICMPv6 Port unreachable packet is,
"give it up, now!", this is no fun at all)

2014年12月30日 星期二

C# 從 textbox 讀進 IP位址後移除前面0的原始碼

剛好需要用到,不懂C#靠著google瞎矇搞定了,貼給需要的人

如果你讀到 IP位址格式是這樣 "172.016.001.123"

但是你的程式必須轉換成 "172.16.1.123" 格式 (不能帶前面的 "0")

把這段加進去用
(程式碼寫到剛好可用,看不慣的請自行優化)
(只有下面這段我懂,其他 C# 我都不懂)

static class Extensions
{
    public static string Right(this string value, int length)
    {
        return value.Substring(value.Length - length);
    }

    public static string RemoveUnwantedZeros(this string value)
    {
        int i;
        string subStr="";
        bool ignore = false;


        for (i = 0; i < value.Length; i++)
        {
            if (value.Substring(i, 1).Equals("."))
            {
                subStr += value.Substring(i, 1);
                ignore = false;
            }
            else if (value.Substring(i, 1).Equals("0"))
            {
                if (ignore)
                {
                    subStr += value.Substring(i, 1);
                }
            }

            else
            {
                subStr += value.Substring(i, 1);
                ignore = true;
            }
        }
        return subStr;
    }
}


然後你程式內就可以用這個功能消掉不要的 '0'

realIP = Extensions.RemoveUnwantedZeros(txtIP);

祝福你~

2014年10月24日 星期五

ASUS RT-N12 D1無法燒Tomato by Shibby磚塊解法

2014.10 買了ASUS RT-N12 D1版 無線路由器
Tomato by Shibby支援的硬體裡 便宜又易買的選擇
拿來當翻牆用的PPtP VPN server

先試了N12內建的 PPtP server
做得很標準  只能連回來存取家裡網路的NAS跟PC

改燒Tomato韌體時 發現沒預期中簡單

網路上大家都說
插電時按住reset十秒左右 就會進入急救(recovery)模式
再用ASUS官網的Firmware Restoration軟體就可以硬燒

試了無數多次 這台完全進不了狀況

乾脆心一橫  改採極端的磚塊製造模式
(以下步驟,不想機器真的變磚塊的請勿模仿)

1.從官網下載原廠韌體
2.登入N12網頁進行韌體更新
3.進行到一半(我是讓它跑到90%確定正在寫flash)
4.拔電...

終於  它掛了!

重開幾次之後  在嘗試用瀏覽器登入192.168.1.1

哈~ Broadcom好樣的
Bootloader裡還有簡易版的web server讓你重燒韌體

就這樣把tomato-K26-1.28.RT-N5x-MIPSR2-123-Max.trx燒進去

重新開機後  番茄icon出現在瀏覽器tab上

大功告成!


2014年7月24日 星期四

dhcpd.conf 裡自訂 option 時的格式定義鳥問題

為這個困擾自己三個小時的鳥問題做個記錄:

想用 dhcpd 做更多事的人難免要自訂 options
翻開 dhcpd-options 說明檔會看到一段敘述

The int32 data type specifies a signed 32-bit integer. The uint32 data type specifies an unsigned 32-bit integer. The int16 and uint16 data types specify signed and unsigned 16-bit integers. The int8 and uint8 data types specify signed and unsigned 8-bit integers. Unsigned 8-bit integers are also sometimes referred to as octets.

說得很好,馬上動手改 dhcpd.conf 加入這條定義

(前略) 
option tr069_agent_switch code 200 = uint8;
(後略)

啟動 dhcp server 
/etc/init.d/dhcpd start
啊~ 錯誤!!!

/var/log/messages 多了這行
Jul 22 02:55:16 cento58 dhcpd: /etc/dhcpd.conf line 13: unknown data type uint8

照說明檔裡的順序逐一試了 int32, unit32, int16....結果是這樣
unknown data type int32
unknown data type uint32
unknown data type int16
unknown data type uint16
unknown data type int8


更怪的是貼錯誤訊息問 google,清一色是 man 檔裡的廢話

直到救星出現 http://ipxe.org/howto/dhcpd


原來要寫成這樣


(前略)
option tr069_agent_switch code 200 = unsigned integer 8;
(後略)

可以跑了....

應該是自己悟性不夠,慚愧又無奈地冷笑兩聲  

動起來就好...

2014年2月10日 星期一

Windows XP對時失敗 (無法取得RPC伺服器)

不曉得當初微軟是怎麼個想法

從第一次裝Windows XP開始
都要處理相同的問題

大致上就是電腦裝好後, 想讓它透過網路自動對時

按下那直觀又簡單的 "立即更新" 後都出現這個錯誤

取得上次同步處理狀態時,發生錯誤。無法取得RPC伺服器。



微軟網站上有個Microsoft MVP, Mr.Ramesh Srinivasan大哥

提供了直接又有效的解法

開啟 "命令提示字元" 視窗

依序打入以下指令

net stop w32time (這行可能會有錯誤,可忽略)
w32tm /register (手動加入Windows Time服務)
net start w32time (啟動Windows Time服務)


再去點 "立即更新" 看看

對時成功!


以上獻給堅持用XP但腦筋又不靈光的老怪物們

(建議各位用台灣本地SNTP server就好, 伺服器填 tick.stdtime.gov.tw)


2014年2月6日 星期四

放棄在老筆電裝 CentOS 5.10 了

從 CentOS 4.9 改安裝 CentOS 5.8 i386 再線上更新成 5.10
有線網路運作正常,無線網路還沒

狐疑 CentOS 怎沒幫忙裝上好用的圖形介面讓我能夠走
[掃描]] -> [連線] -> [輸入金鑰]  -> [連線成功] 的懶人流程

ifconfig -a 確實看到有個隱藏介面 eth1 (為何不是 wlan0?)

System --> Administration --> Network 裡 eth1 顯示
Type 確實是 Wireless

手動設定無線網路參數,改來改去都無法連線 (check cable?)
準備上 Google 找解法

lspci 得到老筆電的無線網卡晶片是

Broadcom Corporation BCM4318 [AirForce One 54g] 
802.11g Wireless LAN Controller (rev 02)

系統確實有抓到網卡,只是某個地方不太正常吧我猜


找到蠻多可能有幫助的建議
可回文者都先說到

"在 CentOS 這種 server 導向的 distro 上設定無線真的不簡單"

隱約萌生放棄的念頭


偷懶想找個掃描無線網路的程式跑看看
iwScanner 看來好用又簡單

下載回來,執行 iwscanner.py 問題一堆
首先是.py裡的 if 寫法我的 CentOS 不支援
手動改了至少十個地方,會跑了
(如果有人需要,請這裡下載)
Device的地方竟然是空的?!!!?


再查了查,似乎要自己掛上無線晶片的 firmware
下載 http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o
再下載 bcm43xx-fwcutter-006.tar.gz 來處理它

先make
真的開始裝 firmware

export FIRMWARE_INSTALL_DIR="/lib/firmware"

./bcm43xx-fwcutter-006/bcm43xx-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta-3.130.20.0.o


重開機載入 firmware (自己猜的步驟)

成功了,iwScanner 裡出現了 eth1,掃描一分鐘後列出一堆 AP

咦? 它只提供無線環境掃描,沒有提供快速設定連線的介面....

殘念!!!

再次用 CentOS 內建介面改了一點無意義的參數
依然無法連線

唉,搞了兩、三小時

煩透了決定放棄~

forum 裡前輩講的對,不懂別搞

耐心看完的朋友

對不起,這次沒幫上忙