winpcap是windows系统网络抓包的一个库,在linux中也对应一个库为libpcap,两者使用是一样的。
1.pcap_lookupdev():查找网卡设备
char *pcap_lookupdev(char *errbuf)
errbuf为出错信息,如果出错errbuf会有内容,返回值为设备名指针(返回NULL说明未发现设备)
2.pcap_lookupnet():获取ip地址:
int pcap_lookupnet(char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf):
device为指定的设备名,netp会返回设备ip,maskp返回设备掩码,errbuf返回出错信息
3.pcap_open_live():开启对应的网卡设备
pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *errbuf);
device为设备名,snaplen为指定每次获取一个包的最大的内容,promisc设置是否为混杂模式,to_ms等待毫秒,errbuf出错信息
4.pcap_compile():添加过滤选项
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *buf, int optmize, bpf_u_int32 mask);
fp存放编译后的bpf, buf为过滤条件,optimize是否优化过滤表,mask为网络掩码
5.pcap_setfilter():设置开启过滤器
int pacap_setfilter(pcap_t *p, struct bpf_program *fp);
6.pcap_loop():循环获取网卡数据
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
p是pcap_open_live返回的值, cnt指抓几个包(无限抓包则为-1),callback回调函数(执行数据处理操作),user(回调函数的第一个para)
7.pcap_close():关闭
void pcap_close(pcap_t *p);
p是pcap_open_live返回值
网上的一段程序
- #include <pcap.h>
- #include <time.h>
- #include <stdlib.h>
- #include <stdio.h>
- void getPacket(u_char * arg, const