【Bootchart】安裝與使用


【環境】

Ubuntu 9.10

【安裝】

$ apt-get install bootchart

【使用】

  1. 安裝後不用更改Grub,直接重新開機就好。
  2. 進入 /var/log/bootchart 底下就是開機的資料。
    image
  3. 資料開始收集的時間不包含Linux Kernel起來的。

【其他】

  • bootchart-lite

【Kiwi】在非Linux的平台弄個Syslogd機制(tbd)


【概念

在Linux是跑一個叫 syslogd/klogd 的demand去抓取kernel/user-space丟出來的除錯訊息。

  • printk: kernel space丟出來的除錯訊息
    printk("<6>Hello, world!\n");
  • syslog: user space丟出來的訊息
    #incluse 
    openlog(argv[0],LOG_PID,LOG_USER);
    syslog(LOG_INFO,"TEST SYSLOG\n");
    closelog();

而 busybox 的 syslogd –R選項又可以負責將撈到的除錯訊息往網路(udp port 514)上丟。

  1. syslogd 所支援的命令,摘錄 -N用法。
    $ busybox syslogd --help
    BusyBox v1.16.0 (2010-02-10 14:33:06 CST) multi-call binary.
    
    Usage: syslogd [OPTIONS]
    
    System logging utility.
    Note that this version of syslogd ignores /etc/syslog.conf.
    
    Options:
     -N rotated logs to keep (default:1, max=99, 0=purge)
     -R HOST[:PORT]  Log to IP or hostname on PORT (default PORT=514/UDP)
  2. 參考Source code。得知syslogd.c並不是用廣播的方式丟debug message,還是需要指定Server端 IP。

    1. host2sockaddr 負責dns/ip切換
    2. sendto 負責丟message
    3. G.remoteFD 就是 file handle

    #if ENABLE_FEATURE_REMOTE_LOG
    static int try_to_resolve_remote(void)
    {
        if (!G.remoteAddr) {
            unsigned now = monotonic_sec();
            if ((now - G.last_dns_resolve) < DNS_WAIT_SEC)
                    return -1;
            G.last_dns_resolve = now;
            G.remoteAddr = host2sockaddr(G.remoteAddrStr, 514);
            if (!G.remoteAddr)                        
    	return -1;        
         }
     return socket(G.remoteAddr->u.sa.sa_family, SOCK_DGRAM, 0);
    }
    #endif
    ...
    #if ENABLE_FEATURE_REMOTE_LOG
    if (G.remoteAddrStr) {
            if (-1 == G.remoteFD) {
                    G.remoteFD = try_to_resolve_remote();
                    if (-1 == G.remoteFD)
                            goto no_luck;
            }
          
            recvbuf[sz] = '\n'; 
           
            sendto(G.remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
                   &G.remoteAddr->u.sa, G.remoteAddr->len);
     no_luck: ;
    }
    #endif
  3. 先以Linux實作(參考: http://www.abc.se/~m6695/udp.html)
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/time.h>
    #include <sys/wait.h>
    #include <errno.h>
    
    #define BUFLEN    512
    #define NPACK    2
    #define PORT    514
    
    #define SRV_IP "192.168.0.105"
    
    void err_msg(char *s)
    {
      perror(s);
      exit(1);
    }
    
    int main(void)
    {
     struct sockaddr_in si_other;
     int s, i, slen=sizeof(si_other);
     char buf[BUFLEN];
    
     if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
        err_msg("socket");
    
     memset((char *) &si_other, 0, sizeof(si_other));
     si_other.sin_family = AF_INET;
     si_other.sin_port = htons(PORT);
     if (inet_aton(SRV_IP, &si_other.sin_addr)==0) {
        fprintf(stderr, "inet_aton() failed\n");
        exit(1);
     }
    
     for (i=0; i<NPACK; i++) {
        printf("Sending packet %d\n", i);
        sprintf(buf, "This is packet %d\n", i);
        if (sendto(s, buf, strlen(buf), 0, &si_other, slen)==-1)
            err_msg("sendto()");
     }
    
     close(s);
     return 0;
    }
  4. 結果,將Filter選項設成 syslog
    image
  5. 實作考量
    1. 能參考那邊的機制: printr/FileConsolePutChar
    2. 有需要作一個fifo的機制嗎,一次塞一個char,

在Win32這邊搭配的就是Wiki 這軟體就是負責去撈 syslogd 丟到網路上的除錯訊息。

【下載】

  1. http://www.kiwisyslog.com/kiwi-syslog-server-trial-download/
    image 

【使用】

(tbd)

【弄個自己的Syslogd】

(tbd)

【參考】

  1. php-syslog-ng http://code.google.com/p/php-syslog-ng/
  2. 目前Ubuntu 9.10已經使用 rsyslogd

【Colasoft Packet Builder】封包產生器


【安裝】
  1. 下載並安裝 Colasoft Packet Builder
    http://www.colasoft.com/download/products/download_packet_builder.php

【使用】

  1. 範例一: ICMP
    1. 首先來造一個ICMP的封包。
    2. 打開 WireShark。
    3. 點選Menu Capture | Interface,選定你要用來抓封包的Interface。按 Start
      比如我的是Atheros AtcL001 Gigabit Ethernet Controller。
      image
    4. 打開 cmd,先ping Hinet DNS一次。
      >ping 168.95.1.1 -n 1
    5. 回到 WireShark,就會發現剛剛 ICMP 的封包被 Monitor 到了。
      如果封包太多,可以在 Fiter 那邊加個 ICMP 的條件(紅色框框那邊)。
      image
    6. 將封包存檔。先停掉WireShark的監視功能。請點選Menu Capture | Stop
    7. 請點選Menu File/Save,注意這邊只要存我們要的封包就好(紅色框部分)。檔名可以取作icmp.pcap。
      image
    8. 打開 Colasoft Packet Builder,將剛剛存檔 import 進來。請點選 File | Import
       image
    9. 再封包旁邊按右鍵,選擇 Send Selected Packets…
      image
    10. 這樣會打開下面的視窗,我設成 ping 5 次,每次間隔一秒。
      image
    11. 當然就會看到 ICMP 的封包送出去了。並且也收到 Hinet DNS 回復的封包。
      看起來 Hinet Dns 少回一個封包(紅色框框部分)。
      image
    12. 如果要看到 Hinet DNS 回復的封包,記得第 Step 9 要把 Wireshark Enable。
  2. 範例二: 自行製造封包  (再研究)

【其他】

  1. Packet generator http://en.wikipedia.org/wiki/Packet_generator
  2. EthView http://people.chu.edu.tw/~anita/

【Buildroot】選單製作


參考buildroot,其選單製作的方式(tbd)

  1. Makemenuconfig.先去build package/config/mconf.c
    CONFIG這變數的內容就是package/config
    $(CONFIG)/mconf:
            @mkdir -p $(CONFIG)/buildroot-config
            $(MAKE) CC="$(HOSTCC)" -C $(CONFIG) conf mconf
            -@if [ ! -f .config ]; then \
                    cp $(CONFIG_DEFCONFIG) .config; \
            fi
    menuconfig: $(CONFIG)/mconf
            @mkdir -p $(CONFIG)/buildroot-config
            @if ! KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \
                    KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \
                    $(CONFIG)/mconf $(CONFIG_CONFIG_IN); then \
                    test -f .config.cmd || rm -f .config; \
            fi
    

【Dictionary .NET】多國語言辭典



Dictionary .NET http://fishcodelib.com/Dictionary.htm

平常查詢英文正常,但查一個 небо 但跑出下面的網頁,還在研究俄文翻譯怎麼用。image

【Winhex】Hex editor


WinHex www.x-ways.net/winhex/
雖然很多套 hex tool都有顯示/修改 hex 的功能,不過這套比較齊全。

  1. 範例: 讀取 JPG
    image
     

【其他】

  1. 免費的HxD http://mh-nexus.de/en/hxd/ 
    可以編輯RAM裡面的資料,使用方式: Extras | Open Ram…
    image 
  2. NotePad++
    提供Plugin的方式來支援Hex edit
  3. UltraEdit http://www.ultraedit.com/
    使用方式: 編輯(E) | 16進位(Hex)功能(X) | Hex 編輯(H)
    image

【參考】

  1. Winhex 15.6 Portable
    http://zone-soft.com/index.php?newsid=1079
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com