在libpcap版本1.0之前,没有pcap_create()和pcap_activate()函数,获取实时捕获句柄需要通过pcap_open_live()获得。
新版本中,通过pcap_create()和pcap_activate()来获得捕获句柄。
使用libpcap 1.0之后的版本中,推荐使用新的函数。
函数原型:
pcap_t *pcap_create(const char *source, char *errbuf);
pcap_create()用来创建一个包捕获句柄,参数source是网络设备的名称(网卡名,如eth0),如果source参数是"any"或者NULL,可以从所有的网口捕获数据。返回的句柄pcap_t *必须通过pcap_activate()激活。
int pcap_activate(pcap_t *p);
pcap_activate()用来激活包捕获句柄。参数p是pcap_create()的返回值。若成功返回0,若失败则返回非零负数,若返回非零正数则表示成功但是有警告。
void CCapture::capWork()
{
const char *dev = "enp3s0";
pcap_t *pcapHandler = NULL;
char errbuf[PCAP_ERRBUF_SIZE] = {0};
pcapHandler = pcap_create(dev, errbuf);
if (pcapHandler == NULL)
{
cout<<errbuf<<endl;
exit(-1);
}
int ret = pcap_activate(pcapH