添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

pcap_next虽然也是通过网口获取数据包,但是只要抓取了一个就会返回,假如想持续不停抓包,当然可以while(1)里持续进行,但是显然有些难看

while(1){
const u_char* pktStr = pcap_next(p, &pkthdr);
if (!pktStr){
printf(“Cannot capture pkt!\n”);
exit(1);
}
printf(“Capture packet length: %d\n”, pkthdr.len);
}

但是libpcap提供了核心函数pcap_loop直接可以实现这一目的

int
pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)

参数cnt设定了需要抓取的数据包的个数,抓了cnt个之后,pcap_loop就会返回,显然如果cnt为1的时候,跟pcap_next的效果是一样的;但大部分都会设置为-1,这样就会一直持续抓包,跟上面的while(1)情况类似

参数callback是一个用户层的回调函数,数据包抓取了之后就交给callback来处理,任人宰割

typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h,const u_char *data);

user参数传递了用户自定义一些数据,是pcap_loop的最后一个参数,进而传递给回调函数

h是收到数据包pcap_pkthdr类型的指针

data是真正数据包的内容

因此可以直接调用pcap_loop来持续抓包,然后在回调函数里,尽情地挖掘你想要的数据包信息吧!!!

[lihui@localhost ~]$ cat loop.c
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>

int current_pkt = 0;

void lihui_callback(u_char *u, const struct pcap_pkthdr *hdr, const u_char *data){
++current_pkt;
printf(“The %d packet length: %d\n”, current_pkt, hdr->len);
}

int main(){
char ebuf[PCAP_ERRBUF_SIZE];
char *device;
int pktlen = 65535;
int misc = 1;
int timeout = 0;
device = pcap_lookupdev(ebuf);
if (device)
printf(“Capture Nic: %s\n”, device);
else {
printf(“Nic Error: %s\n”, ebuf);
exit(1);
}
pcap_t *p = pcap_open_live(device, pktlen, misc, timeout, ebuf);
/*
struct pcap_pkthdr pkthdr;
const u_char* pktStr = pcap_next(p, &pkthdr);
if (!pktStr){
printf(“Cannot capture pkt!\n”);
exit(1);
}
printf(“Capture packet length: %d\n”, pkthdr.len);
*/
printf(“Capture pkt start:\n”);
pcap_loop(p, -1, (pcap_handler)lihui_callback, (u_char *)p);

pcap_close(p);
return 0;
}

  • 涂鸦智能服务端开发工作总结 - 417 views
  • 字节跳动测开面试经历 - 521 views
  • 曹操专车中台服务测试工作总结 - 1,042 views
  • 华为云计算网络服务工作总结 - 1,211 views
  • 网易云计算工作总结 - 1,068 views
  • 水岸风堤 - 624 views
  • 离开无锡新的开始 - 1,057 views
  • KafkaTemplate发送KafKa消息 - 13,042 views
  • MongoTemplate的对象更新操作 - 9,383 views
  • Dubbo QOS服务 - 7,800 views
  • Spring:MyBatis框架@MapperScan注解流程和疑惑 - 7,175 views
  • RedisTemplate操作Redis数据:List类型 - 6,369 views
  • Ant Design Pro:和SpringBoot服务端交互 - 5,599 views
  • RedisTemplate操作Redis数据:ZSet类型 - 5,120 views
  • 《Thinking in Java》5th Edition电子书 - 4,833 views
  • VMware ESXi配置多块物理网卡 - 4,575 views
  • Ant Design Pro:启动以及新增页面 - 4,546 views
  • Compiler 14
  • CPU 7
  • Distributed 3
  • Docker/Kubernetes 8
  • Dubbo 9
  • ElasticSearch 1
  • HTTP 9
  • Java 73
  • Kafka 3
  • LeetCode 49
  • Libnids 5
  • Libpcap 5
  • Life 66
  • Linux 30
  • Linux C 53
  • Middleware 7
  • MongoDB 12
  • Music 27
  • MySQL 11
  • Networking 71
  • OpenStack 53
  • Performance 21
  • Perl 13
  • PHP 6
  • Python 44
  • Redis 14
  • RegularExpression 4
  • Shell 11
  • Spring 34
  • TCP/IP 4
  • Tempest 10
  • Testing 10
  • Tool 31
  • Virtualization 15
  • Web 14
  • 2024年3月 ( 1 )
  • 2023年11月 ( 1 )
  • 2023年2月 ( 1 )
  • 2022年6月 ( 1 )
  • 2022年3月 ( 1 )
  • 2021年8月 ( 2 )
  • 2021年7月 ( 4 )
  • 2021年6月 ( 1 )
  • 2021年4月 ( 1 )
  • 2021年3月 ( 1 )
  • 2021年2月 ( 1 )
  • 2021年1月 ( 4 )
  • 2020年11月 ( 1 )
  • 2020年9月 ( 2 )
  • 2020年8月 ( 3 )
  • 2020年7月 ( 7 )
  • 2020年4月 ( 1 )
  • 2020年3月 ( 1 )
  • 2020年2月 ( 1 )
  • 2020年1月 ( 5 )
  • 2019年12月 ( 4 )
  • 2019年11月 ( 13 )
  • 2019年10月 ( 8 )
  • 2019年9月 ( 7 )
  • 2019年8月 ( 6 )
  • 2019年7月 ( 3 )
  • 2019年6月 ( 4 )
  • 2019年5月 ( 6 )
  • 2019年4月 ( 6 )
  • 2019年3月 ( 2 )
  • 2019年2月 ( 6 )
  • 2019年1月 ( 4 )
  • 2018年12月 ( 6 )
  • 2018年11月 ( 9 )
  • 2018年10月 ( 3 )
  • 2018年9月 ( 3 )
  • 2018年8月 ( 11 )
  • 2018年7月 ( 11 )
  • 2018年6月 ( 13 )
  • 2018年5月 ( 17 )
  • 2018年4月 ( 24 )
  • 2018年3月 ( 22 )
  • 2018年2月 ( 7 )
  • 2018年1月 ( 3 )
  • 2017年12月 ( 3 )
  • 2017年11月 ( 3 )
  • 2017年10月 ( 7 )
  • 2017年9月 ( 1 )
  • 2017年8月 ( 5 )
  • 2017年7月 ( 2 )
  • 2017年6月 ( 1 )
  • 2017年5月 ( 1 )
  • 2017年4月 ( 4 )
  • 2017年3月 ( 7 )
  • 2017年2月 ( 13 )
  • 2017年1月 ( 12 )
  • 2016年12月 ( 17 )
  • 2016年11月 ( 10 )
  • 2016年10月 ( 19 )
  • 2016年9月 ( 8 )
  • 2016年8月 ( 2 )
  • 2016年7月 ( 7 )
  • 2016年5月 ( 5 )
  • 2016年4月 ( 7 )
  • 2016年3月 ( 5 )
  • 2016年2月 ( 4 )
  • 2016年1月 ( 3 )
  • 2015年12月 ( 2 )
  • 2015年11月 ( 12 )
  • 2015年10月 ( 9 )
  • 2015年9月 ( 6 )
  • 2015年8月 ( 9 )
  • 2015年7月 ( 16 )
  • 2015年6月 ( 18 )
  • 2015年5月 ( 12 )
  • 2015年4月 ( 12 )
  • 2015年3月 ( 20 )
  • 2015年2月 ( 34 )
  • 2015年1月 ( 52 )
  • 2014年12月 ( 37 )
  • 2014年11月 ( 88 )
  •