添加链接
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;
}

  • Mysterious:分布式压测平台化实现 - 72 views
  • 涂鸦智能服务端开发工作总结 - 431 views
  • 字节跳动测开面试经历 - 538 views
  • 曹操专车中台服务测试工作总结 - 1,051 views
  • 华为云计算网络服务工作总结 - 1,220 views
  • 网易云计算工作总结 - 1,081 views
  • 水岸风堤 - 633 views
  • 离开无锡新的开始 - 1,079 views
  • KafkaTemplate发送KafKa消息 - 13,069 views
  • MongoTemplate的对象更新操作 - 9,400 views
  • Dubbo QOS服务 - 7,816 views
  • Spring:MyBatis框架@MapperScan注解流程和疑惑 - 7,201 views
  • RedisTemplate操作Redis数据:List类型 - 6,390 views
  • Ant Design Pro:和SpringBoot服务端交互 - 5,650 views
  • RedisTemplate操作Redis数据:ZSet类型 - 5,132 views
  • 《Thinking in Java》5th Edition电子书 - 4,870 views
  • VMware ESXi配置多块物理网卡 - 4,600 views
  • Ant Design Pro:启动以及新增页面 - 4,565 views
  • libpcap核心pcap_loop - 4,331 views
  • Uber H3算法封装成JAR包以及常用API调用 - 4,169 views
  • Kubernetes集群:Dashboard插件各种坑 - 4,113 views
  • RedisTemplate操作Redis数据:Set类型 - 4,014 views
  • VxLAN和VTEP - 3,901 views
  • RedisTemplate操作Redis数据:Hash类型 - 3,692 views
  • MongoDB实现多表连接查询 - 3,579 views
  • JaCoCo:全量代码覆盖率统计 - 3,452 views
  • libpcap读取本地pcap文件 - 3,377 views
  • Telnet调试Dubbo接口,参数里含有枚举类的执行异常解决 - 3,245 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
  •