libpcap捕包 CPU使用率高的问题

candyice 2009-06-10 08:07:25
偶用libpcap捕包就是普通的捕包程序,程序节选如下所示:
//解析IP包的函数
void ip_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content)
{
.....................
}
//接收以太网包的函数,回调函数
void ethernet_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content)
{
.............
switch (ethernet_type)
/* 根据以太网类型字段判断上层协议,然后调用相应函数进行分析 */
{
/* 上层是IP协议 */
case 0x0800:
ip_protocol_packet_callback(argument, packet_header, packet_content);
break;
/* 调用分析IP协议的函数 */
default:
break; /* 其它的协议在此没有分析,读者可以试着进一步分析 */
}
.............
}

void main()
{
pcap_t *pcap_handle;
/* libpap句柄 */
char error_content[PCAP_ERRBUF_SIZE];
/* 存储错误内容 */
char *net_interface;
/* 网络接口 */
struct bpf_program bpf_filter;
/* BPF过滤规则 */
char bpf_filter_string[] = "";
/* 过滤规则字符串,此时为空的,表示捕获所有的网络数据包,而不是捕获特定的网络数据包 */
bpf_u_int32 net_mask;
/* 网络掩码 */
bpf_u_int32 net_ip;
/* 网络地址 */
/* alarm(60);
signal(SIGALRM,alarm_func);*/
net_interface = pcap_lookupdev(error_content);
/* 获得网络接口 */
pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);
/* 获得网络地址和网络掩码 */
pcap_handle = pcap_open_live("eth1", BUFSIZ, 1, 0, error_content);
/* 打开网络接口 */
pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip);
/* 编译过滤规则 */
pcap_setfilter(pcap_handle, &bpf_filter);
/* 设置过滤规则 */
if (pcap_datalink(pcap_handle) != DLT_EN10MB)
return ;
pcap_loop(pcap_handle, - 1, ethernet_protocol_packet_callback, NULL);
/* 注册回调函数,循环捕获网络数据包,然后调用回调函数对捕获的网络数据包进行分析 */
pcap_close(pcap_handle);
/* 关闭Libpcap操作 *
}
上面是一个反复捕包的过程,在抓一个局域网的情况下,CPU占用率很小,当我开了一个模拟攻击的程序后,尽管解析IP包的函数里面不做任何处理,就是抓来包就丢掉,CPU使用率就会高达100%。算了一下流量,流量也不算特别大。
还有一个问题就是,如果我在解析IP包的函数里面用fprintf输出接收到的包的IP地址信息,CPU使用率也会降下来。
这是为什么呢,望达人指点一二,不胜感激!

...全文
433 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
threeleafzerg007 2009-06-11
  • 打赏
  • 举报
回复
看你机器多快了 再说 cpu高也正常 网卡不断有收到封包 不停的发中断给CPU cpu 调中断的上下半部 处理,还要把封包数据从内核 拷到用户空间 这么多工作 你说能不高不 你虽然说 抓来的包 直接扔掉 不过数据应该已经到用户层了吧
candyice 2009-06-11
  • 打赏
  • 举报
回复
那为什么CPU使用率这么高呢?
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 candyice 的回复:]
测试了一下,发现这个模拟攻击程序一分钟可以发包784M,这样的流量算很大吗?
[/Quote]

还好吧,不是专业的测试仪器,也就几G吧。
candyice 2009-06-10
  • 打赏
  • 举报
回复
测试了一下,发现这个模拟攻击程序一分钟可以发包784M,这样的流量算很大吗?
huangyi0718 2021-07-14
  • 举报
回复
@candyice 百兆速度也不小了,pcap性能估计也就这样了吧。

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧