zoukankan      html  css  js  c++  java
  • 回头再看libpcap

    libpcap 之前由于lex yacc 看不下去, 不好的借口(因为我也没有好好看看libpcap的接口设计及使用)

    之后由于很多原因有接触了一下lex yacc (主要是我想写一个解析各种报文的程序,看了一段之后,似乎不适合,可能是理解不深吧)

    回头再看scanner.l 似乎不是那么困难, grammer.y 也不是那么难, libpcap是一个很好的库, 其中内部的虚拟机的设计很是经典,

    值得我们好好看看,学习接口设计, 学习代码...

    理解一个库,看一下简介,即可入手了, 下载,编译,小实例接口一步一步开始了,

    1 使用那个接口

    在linux中用ifconfig即可查看机器上的网口

    传递给程序

    1) 输入

    #include <stdio.h>

    #include <pcap.h> int main(int argc, char *argv[]) {   

      char *dev = argv[1];   

      printf("Device: %s ", dev);   

      return(0);

    }

    2) pcap自己使用第一个
    #include <stdio.h>
    #include <pcap.h>

    int main(int argc, char *argv[])
    {
        char *dev, errbuf[PCAP_ERRBUF_SIZE];

        dev = pcap_lookupdev(errbuf);
        if (dev == NULL) {
            fprintf(stderr, "Couldn't find default device: %s ", errbuf);
            return(2);
        }
        printf("Device: %s ", dev);
        return(0);
    }

    2 Opening the device for sniffing  打开设备准备sniffing

    pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf);

    第一个参数 设备名(如 eth0, wlan0 etc )

    第二个参数 capture 最大的报文字节数

    第三个参数 是否处理 promisc 模式

    第四个参数 指定超时时间(豪秒)

    第五个参数 错误信息的指针 (就是有什么错误就写到这里, 你爱看不看, 也可以传null值)

    3 编译表达式

    int pcap_compile(pcap_t *p, /*handle 上一步的结果 */

    struct bpf_program *fp/*编译之后的结果 */,

    char *str/*输入过滤字符串 ip .. */,

    int optimize,/*是否优化*/

    bpf_u_int32 netmask/*网络的netmask */)

    4 设置过滤器

    int pcap_setfilter(pcap_t *p/*如上*/,

    struct bpf_program *fp/*上一步的结果 */ );

    5 获取一个报文

    u_char *pcap_next(pcap_t *p,/*如上*/

    struct pcap_pkthdr *h/*结果*/ );

    6 关闭

    pcap_close(handle);

    现在去深入

    pcap_compile

    其乐无穷...

     ==>这里有更多

    http://www.tcpdump.org/pcap.html

  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/kwingmei/p/3622001.html
Copyright © 2011-2022 走看看