2014/02/06

修正 sourceforge 裡面 igmpproxy 在 pppx 連線下 (例如 pppoe) 無法運作的問題

igmpproxy 透過 config 檔設定 interface 是 upstream 或是 downstream,然後由 ifvc.c 裡面的 buildIfVc() 來建立各 interface 的資訊。buildIfVc() 建立資訊的方式是去蒐集各 interface 的 ip 資訊,然而 p-t-p 的 ip 資訊會拿到近端 ip/32,導致無法成功運行 igmpproxy 該做的事情。所以需要更改程式,讓他取得遠端的 ip 而不是近端的 ip 才能正常運作。

需增加的程式如下(紅色部份):
            if ( ioctl( Sock, SIOCGIFFLAGS, &IfReq ) < 0 )
                my_log( LOG_ERR, errno, "ioctl SIOCGIFFLAGS" );

            IfDescEp->Flags = IfReq.ifr_flags;

            // aimwang: when pppx get dstaddr for use
            if (0x10d1 == IfDescEp->Flags)    // when pppx
            {
                if ( ioctl( Sock, SIOCGIFDSTADDR, &IfReq ) < 0 )    // get dstaddr
                    my_log(LOG_ERR, errno, "ioctl SIOCGIFDSTADDR for %s", IfReq.ifr_name);
                addr = ((struct sockaddr_in *)&IfReq.ifr_dstaddr)->sin_addr.s_addr;    // rewrite addr
                subnet = addr & mask;    // recalc subnet
            }

            // Insert the verified subnet as an allowed net...
            IfDescEp->allowednets = (struct SubnetList *)malloc(sizeof(struct SubnetList));
            if(IfDescEp->allowednets == NULL) my_log(LOG_ERR, 0, "Out of memory !");

這樣就能取得遠端 ip 來進行 igmpproxy 該有的行為

2013/10/25

IDA pro 直接更改 asm 程式碼的方法

IDA pro 是一套很好用的反組譯程式,但是他把很重要的直接更改指令功能藏起來了,不能直接更改就只能看程式怎麼跑而已。如果有需要修改程式的話,只要
編輯 cfg/idagui.cfg
把 DISPLAY_PATCH_SUBMENU    = NO
改成 DISPLAY_PATCH_SUBMENU    = YES
這樣 edit/patch 就會出現,就能直接改程式碼了

2013/10/24

替 VMWare 採用 LVM 的系統擴充硬碟空間

前提:你的 HOST 硬碟要夠大

第一步:擴展虛擬機器的硬碟空間

  • 因為 LVM 只能使用 Primary Partition,一顆硬碟只能開四個,所以如果已經用掉四個 Primary Partition,請再增加一顆新的虛擬硬碟。

第二步:建立新的 LVM partition

  1. 執行 fdisk -l 查看目前的 partition 建立狀況
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1          13      104391   83  Linux
    /dev/sda2              14        1305    10377990   8e  Linux LVM
  2. 執行 fdisk /dev/sda (如果是第二顆硬碟要把 sda 改成 sdb,第三顆是 sdc,以此類推)
  3. 輸入  n   add a new partition
  4. 輸入 p primary partition
  5. 如果已經有三個 primary partition,就沒得選只能建立第四個,否則看是要建立第幾個 primary partition 輸入其數字,如本例要輸入 3
  6. 輸入 t change a partition's system id
  7. 輸入剛才建立好的 partition 編號,如本例是 3 
  8. 輸入 8e Linux LVM
  9. 輸入 w write table to disk and exit
  10. 執行 partprobe 免重開機立即套用 fdisk 的變更
  11. 執行 pvcreate /dev/sda3 建立實體 LVM (sda3 是剛才建立的 partition,請視情況改變)

第三步:把新的 LVM partition 加入現有 LVM Group

  1. 執行 lvs 檢視現有的 LVM 狀況
      LV       VG         Attr   LSize   Origin Snap%  Move Log Copy%
      LogVol00 VolGroup00 -wi-ao  10.37G
    留意 
    LogVol00 跟 VolGroup00
  2. 執行 vgextend VolGroup00 /dev/sda3 其中 VolGroup00 是要擴充的 LVM Group,sda3 是剛剛建立的 LVM partition
  3. 執行 vgdisplay 檢視 LVM Group 的狀況
    --- Volume group ---
    ... ... 中間省略 ... ...
    Free  PE / Size       110 / 10.00 GB
    留意 PE 的值 110 ,後面會用到
  4. 執行 lvresize -l +110 /dev/VolGroup00/LogVol00 其中 110 是剛才的 PE,VolGroup00 跟 LogVol00 用第一個指令查出來的
  5. 執行 resize2fs -p /dev/VolGroup00/LogVol00 變更 filesystem 的紀錄,變更後 df -h 才會看到新的容量。

第四步:開心使用新容量繼續剛剛因為容量不足而扼腕的工作

2013/06/27

Debian 讓 root 能跑 chromium

編輯 /etc/chromium/default
CHROMIUM_FLAGS 增加 --user-data-dir

存檔後就能用 root 打開 chromium

2013/03/20

CentOS 5 編譯及安裝 freeRadius 2.2.0

使用 freeRadius,本文使用版本 2.2.0

以下使用 CentOS 5 環境,以 root 登入

下載原始碼

wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.0.tar.gz

解包

tar xzvf freeradius-server-2.2.0.tar.gz

config

cd freeradius-server-2.2.0
./configure --prefix=/

編譯

make

安裝

make install

啟動 radius 服務

radiusd -X
參數 -X 表示要顯示除錯資訊,並會強迫為 foreground,第一次執行會先建立 EAP 相關的檔案,最好是使用 -X 執行,檢視有沒有意外狀況發生
之後執行只要執行 radiusd 就會以 daemon 的方式執行。

維護 /etc/raddb/clients.conf

原始的 localhost 設定,其中 secret 是這個 client 使用的通行碼。
client localhost {
    ipaddr = 127.0.0.1
    secret = testing123
    require_message_authenticator = no
    nastype = other
}
再來一個給實際使用的範例,172.20.3.1/24 通行碼為 octtelradius
client 172.20.3.1/24 {
    secret = octtelradius
    shortname = my-pool
}

維護 /etc/raddb/users

建立一個使用 pap 認證的 user
"octtel"        Auth-Type := pap, Cleartext-Password := "22635986"
                Reply-Message = "Welcome %{User-Name}."

測試

radtest octtel 22635986 172.20.3.202 1812 octtelradius
Sending Access-Request of id 20 to 172.20.3.202 port 1812
        User-Name = "octtel"
        User-Password = "22635986"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 172.20.3.202 port 1812, id=20, length=37
        Reply-Message = "Welcome octtel."
密碼錯誤的測試
radtest octtel badpass 172.20.3.202 1812 octtelradius
Sending Access-Request of id 95 to 172.20.3.202 port 1812
        User-Name = "octtel"
        User-Password = "badpass"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 172.20.3.202 port 1812, id=95, length=37
        Reply-Message = "Welcome octtel."
通行碼錯誤的測試
radtest octtel 22635986 172.20.3.202 1812 badsec
Sending Access-Request of id 78 to 172.20.3.202 port 1812
        User-Name = "octtel"
        User-Password = "22635986"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
Sending Access-Request of id 78 to 172.20.3.202 port 1812
        User-Name = "octtel"
        User-Password = "22635986"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
Sending Access-Request of id 78 to 172.20.3.202 port 1812
        User-Name = "octtel"
        User-Password = "22635986"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
radclient: no response from server for ID 78 socket 3