• HP-UX 自己提供了抓包工具,nettl 。在tcpdump不能用的时候它(比如tcpdump在HP-UX上就不能抓回环上的包)就派上用场了。总结一下nettl的主要用法,备查。


    开始抓包:
    # nettl -tn all -e all -maxtrace 99999 -f /tmp/tixiang

    # nettl -tn loopback -e ns_ls_tcp -maxtrace 99999 -f /tmp/tixiang...
  • 有时候为了查找kernel的某个特性是在哪个版本引入的总是要找半天,今天发现一个原来在 kernelnewbies.org 已经进行了汇总。为了查找各个kernel版本的变更,可以通过访问这种URL来实现: http://kernelnewbies.org/Linux_2_6_30

    为查阅方便,汇集各个版本的变更简要描述:

    Linux 2.6.31 kernel released on 9 September, 2009 http://kernel...

  • N皇后问题是一个经典的问题,在很多地方都有讨论过。回溯法是经典的解法,但是随着N的增大,其复杂度的增加呈指数增长,如果N=100使用回溯解法的话,回溯要运行的时间估计你可以去喝一壶茶了。

    这段时间在看《人工智能》,里面也有对其的讨论,介绍了爬山法在N皇后问题中的应用。爬山法是一种向值增加的方向持续移动到简单循环过程,它将会在到达一个“峰顶”时终止,此时相邻状态中没有比该它更高的值。这个算法不维护搜索树。

    最基本的爬上搜索算法...

  • 今天又看了一下了安全编程的指南。看到对异常的处理部分,不由想到前两天在客户的环境中出现一个问题,由于在捕获异常后没有完全释放之前获得锁,导致在程序出现异常后,某些资源一直处于被锁定状态。最后只有重新启动应用才能释放资源。对异常的处理要非常的小心才是。

    编写安全的代码的参考资料:

    • [CERTSecCod] – CERT Secure Coding Standards
      https://www.securecoding.cert.org/confluence/display/seccode/CERT+Secure+Coding+Standards
    • http://www.owasp.org/ - Web Applications
    • [Posix] – The Open Group Base Specifications Issue 7, IEEE Std 1003.1-2008
      http://www.opengroup.org/onlinepubs/9699919799/nframe.html
    • [STRLCPY] – strlcpy and strlcat--Consistent, Safe, String Copy and Concatenation
      http://www.usenix.org/events/usenix99/millert.html
    • [CppStdLib] – C++ Library Reference
      http://www.cplusplus.com/reference/


    Books:

    • The CERT C Secure Coding Standard”, Robert C. Seacord, Addison-Wesley Professional, 2008, ISBN-10: 0321563212, ISBN-13: 978-0321563217
    • Secure Coding in C and C++”, Robert C. Seacord, Addison-Wesley Professional, 2005, ISBN-10: 0321335724, ISBN-13: 978-0321335722


    Papers:

    • ISO/IEC PDTR 24772, Information technology – Programming languages – Guidelines to avoiding vulnerabilities in language selection and use
      http://isotc.iso.org/livelink/livelink/SC22-N-4420.pdf?func=doc.Fetch&nodeId=7716670&docTitle=SC22-N-4420

     

  • 今天参加了第二次的成都Scrum聚会,听到了一些新的Agile工具,在此列出以作备忘:

    Hudson,持续集成的工具。CruiseControl并不是唯一的选择。 NetBean,Eclipse的竞争者。 Mercurial,一个分布式的版本控制工具 xUnit Sonar Review Board ... 大家有很多共识,软件开发中最关键的还是人。我认为软件开发需要做到的是 选择正确的人做正确的事。

    It all about...

  • 因为测试需要,使用Python实现的的一个HTTP的Digest计算工具。

    代码如下:

    #!/usr/bin/env python
    #
    # Author: Chen Ming
    #
    # HTTP authentication: RFC 2671

    import hashlib

    def H(data):
      m = hashlib.md5()...

  • 这个问题源自ACE邮件列表中使用Reactor来进行串口通信的问题,最后的根因时因为调用register_handler()的时机不对,还没有connect(),就调用了register_handler(),这个时候要注册的句柄因为没有建立连接,值还是-1,注册会失败,导致后续不能获得串口上的数据是理所当然的了。总结一下Reactor中register_handler()/remove_handler()的调用顺序就是:

    connect()/accept() &n...
  • Kdump是一种调试Linux内核的方法,用于在Linux内核出现Oops之后自动dump内核映像到指定位置的机制,编译我们的事后调试。

    Kdump is a new kernel crash dumping mechanism and is very reliable. The crash dump is
    captured from the context of a freshly booted kernel and not from the context o...

  • 2009-03-06

    DRBD实践

    1.    实验环境
    OS:RHEL 5.2 64bit
    DRBD 8.2.6

     

    硬件配置:
      三个物理网卡(注[1])(2个用于bonding,一个用于心跳。)
      在两台机器上分别分配一个4G的分区。

     
    2.    准备工作
    为了测试方便,先划一个2G大小的逻辑分区出...
  • 2.4的内核中可以通过修改sys_call_table来很轻松的替换系统调用,来完成很多trick,很多的rootkit就是基于这种手法来完成的。到了2.6的内核,事情就不是这么回事了,sys_call_table不再被export出来了,这样的话就不能简单通过修改sys_call_table来替换系统调用了。如果再继续使用sys_call_table的话,将会得到类似如下的警告:

    WARNING: "sys_call_table" [/mnt/linux/km/lpp/s...
  • 现在windows上也有类似TortoiseSVN集成的git客户端,它和小乌龟类似,名叫TortoiseGit,安装它之前需要先安装MSysGit。

    安装好了之后使用它的clone功能来获取Linux的源代码,git的Url填这个:

    git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

    这以后就可以方便的查看文件的修订记录了。
    ...

  • 2008-04-16

    使用gdb调试异常 - [程序]

    有时程序中有未捕获的异常会导致程序异常的行为甚至导致程序的直接退出。这对服务器程序来说是不可接受的。

    可以使用gdb来跟踪异常的throw

    使用gdb捕获异常:

    catch throw

    使用gdb捕获线程退出:

    catch pthread_exit 

    这样,如果相应的事件发生,gdb就会中断程序的执行,就可以使用gdb的 bt 命令来检查出现错误的调用栈了。

     

    更多信息:

    help catch

     

    • 现象


    设置了Queue的通知策略之后,在putq之后会调用Reactor的notify方法,Reactor内部使用一个管道来传输通知事件,导致在写入通知事件时阻塞在该管道上,从而导致程序挂起。
    这是一个很早就发现的bug,但是一直没有被修改。一方面是它不好修改,另一方面是ACE的维护者缺乏资金解决这个问题。

    • 一个示例的调用栈:

    (gdb) thr app all bt

    Thread 4 (Thread 0xb7ad3b90 (LWP 31160)):   # ---- Scheduler thread.
    #0  0xb80da430 in __kernel_vsyscall ()
    #1  0xb7f790e5 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/i686/cmov/libpthread.so.0
    #2  0x08070c59 in ACE_OS::cond_wait (cv=0x91a7cbc, external_mutex=0x91a7ca0)
        at /home/cm/ACE_wrappers/ace/OS_NS_Thread.inl:329
    #3  0x08070c9f in ACE_Condition<ACE_Thread_Mutex>::wait (this=0x91a7cbc)
        at /home/cm/ACE_wrappers/ace/Condition_T.cpp:90
    #4  0x0807020a in cm::Scheduler::choose_processor (this=0x91a7c54)
        at /home/cm/Dropbox/projects/ace_skel/src/Scheduler.cpp:94
    #5  0x080705ad in cm::Scheduler::svc (this=0x91a7c54)
        at /home/cm/Dropbox/projects/ace_skel/src/Scheduler.cpp:80
    #6  0xb7daae52 in ACE_Task_Base::svc_run (args=0x91a7c54) at Task.cpp:275
    #7  0xb7dac2ed in ACE_Thread_Adapter::invoke_i (this=0x91a7fa0) at Thread_Adapter.cpp:149
    #8  0xb7dac366 in ACE_Thread_Adapter::invoke (this=0x91a7fa0) at Thread_Adapter.cpp:98
    #9  0xb7d33271 in ace_thread_adapter (args=0x91a7fa0) at Base_Thread_Adapter.cpp:124
    #10 0xb7f754ff in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
    #11 0xb7ef049e in clone () from /lib/tls/i686/cmov/libc.so.6

    Thread 3 (Thread 0xb72d2b90 (LWP 31161)):   # ---- Processor thread.
    #0  0xb80da430 in __kernel_vsyscall ()
    #1  0xb7f7c07b in write () from /lib/tls/i686/cmov/libpthread.so.0
    #2  0xb7d212ea in ACE::send (handle=6, buf=0xb72cff34, n=8, timeout=0x8)
        at /home/cm/ACE_wrappers/ace/OS_NS_unistd.inl:1200
    #3  0xb7d4da29 in ACE_Dev_Poll_Reactor_Notify::notify (this=0x91a3c10, eh=0x92095b0, mask=2,
        timeout=0x0) at Dev_Poll_Reactor.cpp:165
    #4  0xb7d4bcbc in ACE_Dev_Poll_Reactor::notify (this=0x91a3980, eh=0x92095b0, mask=2,
        timeout=0x0) at Dev_Poll_Reactor.cpp:2028
    #5  0xb7d9550e in ACE_Reactor::notify (this=0x91a38c0, event_handler=0x92095b0, mask=2, tv=0x0)
        at Reactor.cpp:481
    #6  0xb7d95e76 in ACE_Reactor_Notification_Strategy::notify (this=0x9209638)
        at Reactor_Notification_Strategy.cpp:28
    #7  0x08062d47 in ACE_Message_Queue<ACE_MT_SYNCH>::notify (this=0x9209660)
        at /home/cm/ACE_wrappers/ace/Message_Queue_T.cpp:1998
    #8  0x080650cc in ACE_Message_Queue<ACE_MT_SYNCH>::enqueue_tail (this=0x9209660,
        new_item=0xb61bb3d8, timeout=0xb72d0064)
        at /home/cm/ACE_wrappers/ace/Message_Queue_T.cpp:1888
    #9  0x08076c2c in ACE_Task<ACE_MT_SYNCH>::putq (this=0x92095b0, mb=0xb61bb3d8, tv=0xb72d0064)
        at /home/cm/ACE_wrappers/ace/Task_T.inl:36
    #10 0x08075653 in cm::RequestHandler::async_send (this=0x92095b0, mb=0xb61bb3d8)
        at /home/cm/Dropbox/projects/ace_skel/src/RequestHandler.cpp:257
    #11 0x080746ef in cm::HttpTransaction::send_static_file (this=0x9209d10, uri=@0xb72d2288)
        at /home/cm/Dropbox/projects/ace_skel/src/HttpTransaction.cpp:98
    #12 0x08074c8b in cm::HttpTransaction::execute (this=0x9209d10)
        at /home/cm/Dropbox/projects/ace_skel/src/HttpTransaction.cpp:37
    #13 0x080712a0 in cm::Processor::svc (this=0x91aa128)
        at /home/cm/Dropbox/projects/ace_skel/src/Processor.cpp:47
    #14 0xb7daae52 in ACE_Task_Base::svc_run (args=0x91aa128) at Task.cpp:275
    #15 0xb7dac2ed in ACE_Thread_Adapter::invoke_i (this=0x91aa330) at Thread_Adapter.cpp:149
    #16 0xb7dac366 in ACE_Thread_Adapter::invoke (this=0x91aa330) at Thread_Adapter.cpp:98
    #17 0xb7d33271 in ace_thread_adapter (args=0x91aa330) at Base_Thread_Adapter.cpp:124
    #18 0xb7f754ff in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
    #19 0xb7ef049e in clone () from /lib/tls/i686/cmov/libc.so.6

    Thread 2 (Thread 0xb6ad1b90 (LWP 31162)):   # ---- Processor thread
    #0  0xb80da430 in __kernel_vsyscall ()
    #1  0xb7f7c07b in write () from /lib/tls/i686/cmov/libpthread.so.0
    #2  0xb7d212ea in ACE::send (handle=6, buf=0xb6acef34, n=8, timeout=0x8)
        at /home/cm/ACE_wrappers/ace/OS_NS_unistd.inl:1200
    #3  0xb7d4da29 in ACE_Dev_Poll_Reactor_Notify::notify (this=0x91a3c10, eh=0x9209448, mask=2,
        timeout=0x0) at Dev_Poll_Reactor.cpp:165
    #4  0xb7d4bcbc in ACE_Dev_Poll_Reactor::notify (this=0x91a3980, eh=0x9209448, mask=2,
        timeout=0x0) at Dev_Poll_Reactor.cpp:2028
    #5  0xb7d9550e in ACE_Reactor::notify (this=0x91a38c0, event_handler=0x9209448, mask=2, tv=0x0)
        at Reactor.cpp:481
    #6  0xb7d95e76 in ACE_Reactor_Notification_Strategy::notify (this=0x92094d0)
        at Reactor_Notification_Strategy.cpp:28
    #7  0x08062d47 in ACE_Message_Queue<ACE_MT_SYNCH>::notify (this=0x92094f8)
        at /home/cm/ACE_wrappers/ace/Message_Queue_T.cpp:1998
    #8  0x080650cc in ACE_Message_Queue<ACE_MT_SYNCH>::enqueue_tail (this=0x92094f8,
        new_item=0x92f5c38, timeout=0xb6acf064)
        at /home/cm/ACE_wrappers/ace/Message_Queue_T.cpp:1888
    #9  0x08076c2c in ACE_Task<ACE_MT_SYNCH>::putq (this=0x9209448, mb=0x92f5c38, tv=0xb6acf064)
        at /home/cm/ACE_wrappers/ace/Task_T.inl:36
    #10 0x08075653 in cm::RequestHandler::async_send (this=0x9209448, mb=0x92f5c38)
        at /home/cm/Dropbox/projects/ace_skel/src/RequestHandler.cpp:257
    #11 0x08074917 in cm::HttpTransaction::send_static_file (this=0x9209bc0, uri=@0xb6ad1288)
        at /home/cm/Dropbox/projects/ace_skel/src/HttpTransaction.cpp:110
    #12 0x08074c8b in cm::HttpTransaction::execute (this=0x9209bc0)
        at /home/cm/Dropbox/projects/ace_skel/src/HttpTransaction.cpp:37
    #13 0x080712a0 in cm::Processor::svc (this=0x91ac488)
        at /home/cm/Dropbox/projects/ace_skel/src/Processor.cpp:47
    #14 0xb7daae52 in ACE_Task_Base::svc_run (args=0x91ac488) at Task.cpp:275
    #15 0xb7dac2ed in ACE_Thread_Adapter::invoke_i (this=0x91ac690) at Thread_Adapter.cpp:149
    #16 0xb7dac366 in ACE_Thread_Adapter::invoke (this=0x91ac690) at Thread_Adapter.cpp:98
    #17 0xb7d33271 in ace_thread_adapter (args=0x91ac690) at Base_Thread_Adapter.cpp:124
    #18 0xb7f754ff in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
    #19 0xb7ef049e in clone () from /lib/tls/i686/cmov/libc.so.6

    Thread 1 (Thread 0xb7ad48e0 (LWP 31159)):  # ---- Reactor thread.
    #0  0xb80da430 in __kernel_vsyscall ()
    #1  0xb7f790e5 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/i686/cmov/libpthread.so.0
    #2  0xb7d3c254 in ACE_Condition_Thread_Mutex::wait (this=0x91ae99c, mutex=@0x80, abstime=0x0)
    ---Type <return> to continue, or q <return> to quit---
        at /home/cm/ACE_wrappers/ace/OS_NS_Thread.inl:362
    #3  0xb7d3c2bb in ACE_Condition_Thread_Mutex::wait (this=0x91ae99c, abstime=0x0)
        at Condition_Thread_Mutex.cpp:107
    #4  0x08063c90 in ACE_Message_Queue<ACE_MT_SYNCH>::wait_not_full_cond (this=0x91ae920,
        timeout=0x0) at /home/cm/ACE_wrappers/ace/Message_Queue_T.cpp:1715
    #5  0x08064e38 in ACE_Message_Queue<ACE_MT_SYNCH>::enqueue_head (this=0x91ae920,
        new_item=0xb6105610, timeout=0x0) at /home/cm/ACE_wrappers/ace/Message_Queue_T.cpp:1777
    #6  0x0807236a in ACE_Task<ACE_MT_SYNCH>::ungetq (this=0x91ae870, mb=0xb6105610, tv=0x0)
        at /home/cm/ACE_wrappers/ace/Task_T.inl:43
    #7  0x08071d5d in cm::HttpRequestHandler::handle_output (this=0x91ae870)
        at /home/cm/Dropbox/projects/ace_skel/src/HttpRequestHandler.cpp:86
    #8  0xb7d4d982 in ACE_Dev_Poll_Reactor_Notify::dispatch_notify (this=0x91a3c10,
        buffer=@0xbfaf5c04) at Dev_Poll_Reactor.cpp:365
    #9  0xb7d4c91b in ACE_Dev_Poll_Reactor_Notify::handle_input (this=0x91a3c10, handle=5)
        at Dev_Poll_Reactor.cpp:297
    #10 0xb7d4f945 in ACE_Dev_Poll_Reactor::dispatch_io_event (this=0x91a3980, guard=@0xbfaf5d14)
        at /home/cm/ACE_wrappers/ace/Dev_Poll_Reactor.inl:126
    #11 0xb7d4fb4c in ACE_Dev_Poll_Reactor::dispatch (this=0x91a3980, guard=@0xbfaf5d14)
        at Dev_Poll_Reactor.cpp:1079
    #12 0xb7d4fca6 in ACE_Dev_Poll_Reactor::handle_events_i (this=0x91a3980, max_wait_time=0x0,
        guard=@0xbfaf5d14) at Dev_Poll_Reactor.cpp:1056
    #13 0xb7d4fd7c in ACE_Dev_Poll_Reactor::handle_events (this=0x91a3980, max_wait_time=0x0)
        at Dev_Poll_Reactor.cpp:1012
    #14 0xb7d94fc3 in ACE_Reactor::run_reactor_event_loop (this=0x91a38c0, eh=0) at Reactor.cpp:224
    #15 0x08062452 in main (argc=7, argv=0xbfaf5f04)
        at /home/cm/Dropbox/projects/ace_skel/src/main.cpp:75
    #0  0xb80da430 in __kernel_vsyscall ()

    • 规避方法

    把ACE_Message_Queue的high water level设置为一个很高的值,避免队列满触发该bug。

     

    • 参考

    http://groups.google.com/group/comp.soft-sys.ace/browse_thread/thread/3575b21beae71683?pli=1
    http://groups.google.com/group/comp.soft-sys.ace/browse_thread/thread/38fb11cf258f3eec

  • 编辑vnc服务的配置文件,设定哪些用户能启用VNC
      /etc/sysconfig/vncservers

    比如允许mochen用户启动VNC服务
    VNCSERVERS="1:mochen"
    VNCSERVERARGS[1]="-geometry 1024x768"

    使用 su - 切换到VNC的用户下,修改该用户连接VNC时的密码,该密码可以与

    系统的登录密码不一致:
      ...
  • 有时候在执行shell脚本的时候需要处理用户的中断,比如Ctrl+C,收到这种中断后需要清理资源,然后优雅的退出程序。

    那么如何在shell脚本中捕获并处理信号呢?简单的说就是使用 trap 命令。

    一个简单的示例:

    LOCKFILE=/sc_fdb/fdb_keepalive.log

    # redirect stdout and stderr to $LOGFILE
    LOGFILE=/sc_...
  • 在测试使用for_each_process()的时候需要获取tasklist_lock的读锁:

    read_lock(&tasklist_lock);

    tasklist_lock声明在 include/linux/sched.h 里。这样的代码可以编译,但是安装的模块的时候却遇到如下错误:

    # insmod mymod.ko
    insmod: error inserting 'mymod.ko': -1 Un...
  • 1. 块(block)设备和字符(character)设备的区别:
    块设备有缓冲,因此能选择响应请求的顺序以提高性能,读的时候是一块一块的读。块设备能随机访问。存储设备一般是块设备。
    字符设备没有缓冲,按顺序读取。比如键盘,鼠标都是字符设备。大多数设备都是字符设备,因为大多数设备都不需要块设备类型的缓冲。

    ls -l /dev/ 的结果以b开头就是块设备,以c开头的就是字符设备。

    2. 设备的Major和Minor号
    # ls...



  • Oops是内核编程中比较容易遇到的问题,为了跟多的了解Oops来便于调试,我对Oops提供的信息进行一个总结,以及如何调试Oops。



     

    一个完整的Oops:



    BUG: unable to handle kernel paging request at&nb...

  • 这段时间因为需要接触Linux内核,CentOS/RHEL的内核源代码缺省安装时并不会安装,需要单独的安装。

    CentOS 5 提高了自己的内核编译方法,详见 http://wiki.centos.org/HowTos/Custom_Kernel。但这只能编译CentOS 5的主流内核版本2.6.18,如果要编译其它版本的内核还是需要从http://www.kernel.org下载后进行编译。

    第一步,获取内核源代码

    $ ...
  • Linux的Kernel在产生Oops后会默认情况下把Oops的相关信息打印在控制台上,只有通过控制台才能看到Oops的信息,而且因为受到控制台行数限制,不能完整的看到Oops的信息,这样对调试Oops很麻烦,一种方法使用虚拟机,把串口输出指定到文件,然后再的Linux的控制台消息重定向到串口,这样可以很方便的捕获串口输出,方便调试Oops。

    第一步,在VMware中设置串口输出:

    Settings -> Hardware -> Add...
  • 2007-05-15

    红黑树的C++实现 - [程序]

    《算法导论》第13章 红黑树

    红黑树是许多“平衡的”的查找树的中的一种。红黑树提供了非常高的查找效率。STL的内部容器就是基于红黑树实现的。

    《算法导论》上红黑树算法并不完整,我使用c++完整实现了红黑树的算法。

    更多的红黑树的信息参考wiki:http://en.wikipedia.org/wiki/Red_black_tree

    贴出源代码供以后参考:
    ...

  • 2007-05-10

    二项堆的C++实现 - [程序]

    《算法导论》第19章中介绍了二项堆,使用伪码的方式提供部分二项堆的操作算法。

    我使用c++完整实现了二项堆的相关算法,并补充实现了查找和拷贝的算法。

    对于查找,二项堆的效率并不高,所以在算法导论中甚至都没有讨论查找的算法。

    如果不清楚什么事二项堆,可以参考 http://en.wikipedia.org/wiki/Binomial_heap

    一切以源代码为准:

    Binom...

  • APT 的配置文件
    /etc/apt/sources.list

         # See sources.list(5) for more information, especially
         # Remember that you can only use http, ftp or file URIs
         # CDROMs are managed through the apt-cdrom tool.
         deb ftp://ftp.linuxforum.net/debian stable main contrib non-free
     &...
  • Putty默认的设置下,使用ssh登录到Linux的主机上,使用ls查看目录的颜色很暗,而且默认的vim的配色也不是很好看,当然可以使用vim的 :set bg=dark 来让vim的语法加亮变得好看点。

    原来有此抱怨的人不仅我一人,在网上搜了一下发现已经有人对这个问题进行总结,并给出了建议的Putty的默认设置, 摘要如下:

    Putty settings summary.
    Category: Session
    Conne...
  • 2007-04-14

    NTP MINI HOWTO - [Linux]

    我的计算机需要一个准确的时间, 所以我选择了NTP

    安装ntp (Debian Linux)
    # apt-get install ntp
    # apt-get install ntp-server
    # apt-get install ntpdate

    配置
    配置文件:/etc/ntp.conf
    可用的NTP服务器:
    可以到www.pool.ntp.org上面去找。我用的如下
    server 0.asia.pool.ntp.org
    server 1.asia.pool.ntp.org
    server 2.asia....

  • windbg是Windows上的调试工具。据说功能比较强大,我用它是因为它能支持JIT和

    利用程序的mini dump来进行Postmortem调试。发现确实是一个不错的工具。


    windbg命令
    o 断点相关命令
    bl 列出当前的所有断点

    bc id Clear断点

    be id Enable断点
    ...
  • 痕迹。