kots's profile光荣与梦想——永远的CCCPPhotosBlogListsMore Tools Help

Blog


    January 25

    winpcap真是好东西

    前段日子突然有个特别的需要:写一个可以探测网络中特定数据包并可以发RAW数据包的程序。当然,通过winsock去解决是不现实的。要完成这项任务,最好的方法就是winpcap。但是winpcap只提供了c的sdk……没办法,谁叫delphi不那么吃香呢?于是唯一的办法就是自己转换需要用的头文件。转换过程不难,就是比较麻烦。不过一个比较好的地方是许多重要参数都是指针,可以直接用pointer代替复杂的结构说明。

     
    程序倒不难写,直接对照sdk就可以了,写出来的东西效果也不错。不过出于某种考虑,我没有使用pcap_loop,而是使用pcap_next。而且timeout值只取了100ms,以免界面无法响应。另外,如果知道需要抓取的包的特点,可以考虑使用pcap_compile以省去不必要的处理,这样程序的效率也可以提高不少。但是pcap_compile的缺点是编译的bytecode不能保存。不过这样安全性倒比较好。
     
    总地说来,winpcap是很方便的一个东西,可以直接处理ethernet包。有名的网络执法官就是基于winpcap的。不过那玩意要钱的。学了winpcap,再也不鸟那破玩意了。当然,只要了解一点高层协议,做个http sniffer也不是很难的事情。