其他分享
首页 > 其他分享> > NPacp库

NPacp库

作者:互联网

# 编译一个过滤表达式
int pcap_compile(pcap_t *p, struct bpf_program *fp, const char *str, int optimize, bpf_u_int32 netmask);

p是pcap_t指针;
program是一个指向bpf_program结构的指针,由pcap_compile()填入;
str是一个过滤表达式。
optimize控制是否对生成的代码进行优化。
netmask指定捕获数据包的网络的IPv4掩码;

# 设置过滤器
int pcap_setfilter(pcap_t *p, struct bpf_program *fp);

p是pcap_t指针;
fp指向一个bpf_program结构的指针;

# 创建一个实时捕捉的句柄
pcap_t *pcap_create(const char *source, char *errbuf);

source是一个字符串,指定要打开的网络设备;
pcap_create() 成功时返回一个 pcap_t *,失败时返回 NULL。如果返回NULL,errbuf将被填入适当的错误信息。errbuf被认为至少能够容纳PCAP_ERRBUF_SIZE字符。

# 为一个尚未激活的捕获句柄, 设置数据包长度。
int pcap_set_snaplen(pcap_t* p, int snaplen);

# 为一个尚未激活的捕获句柄, 设置混合模式。
int pcap_set_promisc(pcap_t* p, int promisc);

# 为一个尚未激活的捕获句柄, 设置超时时间。
int pcap_set_timeout(pcap_t *p, int to_ms);

# 激活一个捕获句柄
int pcap_activate(pcap_t *p);

# 打开一个要写入数据包的文件
pcap_dumper_t *pcap_dump_open(pcap_t *p, const char *fname);
pcap_dumper_t *pcap_dump_open_append(pcap_t *p, const char *fname);
pcap_dumper_t *pcap_dump_fopen(pcap_t *p, FILE *fp);

# 从一个pcap_t中读取下一个数据包
int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data);
const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);

# 写入一个数据包至pcap文件
void pcap_dump(u_char *user, struct pcap_pkthdr *h, u_char *sp);

# 处理来自实时捕获或保存文件的数据包
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user);

cnt的值为-1或0相当于无穷大,所以数据包被处理,直到另一个结束条件发生;
callback为回调函数指针;
user为pcap_dumper_t指针;

# 获取链路层头的类型
int pcap_datalink(pcap_t *p);

# 将pcap描述符的当前链接层头类型设置为dlt指定的类型
int pcap_set_datalink(pcap_t *p, int dlt);

# 打开一个假的 pcap_t,用于编译过滤器或打开一个捕捉器进行输出
pcap_t *pcap_open_dead(int linktype, int snaplen);
pcap_t *pcap_open_dead_with_tstamp_precision(int linktype, int snaplen, u_int precision);

linktype是pcap_t的链路层类型;
snaplen是数据包长度;
precision 指定了数据包的时间戳精度;

标签:const,int,数据包,char,句柄,pcap,NPacp
来源: https://www.cnblogs.com/shiguoliang/p/16442526.html