libpcap是一个抓取网络数据报文的C语言函数库,使用这个库可以非常方便的抓取网络上的报文,方便我们分析经过我们设备上的各种报文;
使用libcap库编译时都要在后面加上-lpcap选项
使用pcap探测获取网络接口
char * pcap_lookupdev(char * errbuf)
这个函数就是用来探测网络接口的,它会返回第一个合适的网络接口字符串指针,如果出错则在errbuf中返回,长度至少是PCAP_ERRBUF_SIZE。
#include
#include
#include
int main()
{
char errBuf[PCAP_ERRBUF_SIZE], * devStr;
devStr = pcap_lookupdev(errBuf);
if (devStr)
printf("success: device: %s\n", devStr);
else
{
printf("error: %s\n", errBuf);
exit(1);
}
return 0;
}
注意这个函数是返回第一个合适的网络接口字符串,我的主机第一个合适的网络接口为 vibir0端口,在这个虚拟端口下没有办法抓到包,因而要找到指定的端口要要循环遍历端口后,进行选择特定网卡端口
char * get(){
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
/* 获取本地机器设备列表 */
if (pcap_findalldevs( &alldevs, errbuf ) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
exit(1);
}
for(d= alldevs; d != NULL; d= d->next)
{
printf("%d. %s\n", ++i, d->name);
}
//获取指定的设备
char getPort[32];
gets(getPort);
for(d= alldevs; d != NULL; d= d->next)
{if(strcmp(d->name,getPort)==0)
{
printf("%d. %s", ++i, d-