现在位置: 首页 > Libpcap
一 概述 前篇已经讲述了接收实现,而对于libpcap抓包的重要工具,本身其实也集成了packet_mmap抓包方式。那么既然可以用于捕获抓包。packet_mmap可以实现发送抓包吗?答案当然是肯定的。不过网上对于packet_mmap发送介绍少之又少。接下来会讲解packet_mmap发送数据包遇到的问题。 二 使用 packet_mmap原理跟接收原理一致,就不过重复讲述。唯一区别前篇原理中提到的状态标识,发送的状态标识跟接收的标识不一样。这后面会细说。...
阅读全文
一 概述 · 前篇了解了libpcap库如何实现抓包 · 中篇深入内核底层讲述了抓包的原理 · 后篇自己实现过抓包过程 上述篇章中讲述的只是原始的抓包流程。 原始的抓包流程?简单的说就是创建socket,设置bpf后,每次接收数据包都要调用recvfrom系统调用。而每次调用recvfrom内核底层抓到的数据包都需要用内核copy到用户。不管是系统调用,还是copy都是相当耗cpu性能的。而linux内核提供了一种更高效的抓包方式packet_mmap. 二 packet_m...
阅读全文
一 概述 在了解了tcpdump的原理后,你有没有想过自己去实现抓包过滤? 可能你脑子里有个大概的思路,但是知道了理论知识,其实并不能代表你完全的理解。只要运用后,你才知道哪些点需要注意,之前没有考虑到的。 二 如何实现抓包过滤 在写代码前,先捋下思路,和相应的理论知识。 libpcap 库中实现抓包关键代码 sock_fd = cooked ? socket(PF_PACKET, SOCK_DGRAM, protocol) : socket(PF_PACKET, SOCK_RAW, protocol); libpcap...
阅读全文
一 概述 前篇通过libpcap分析,可以很清楚的发现其实用户层调用了三个系统调用,就实现了将内核网卡抓的包,返回给用户层。 · 1.创建一个socket ; sock_fd = cooked ?socket(PF_PACKET, SOCK_DGRAM, protocol) :socket(PF_PACKET, SOCK_RAW, protocol); · 2 设置bpf 规则,使得规则在内核返回给用户的包就已经经过bpf过滤。 · 3 recvfrom 接收抓到的数据包 而对于内核做了那些呢? · 链路层网口抓的包,是如何给到对应的socket...
阅读全文
一 概述 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 至于tcpdump参数如何使用,这不是本章讨论的重点。 liunx系统抓包工具,毫无疑问就是tcpdump。而windows的抓包工具,wireshark也是一款主流的抓包工具。wireshark 使用了winpcap库。tcpdump 基于 libpcap库。而winpcap库是类似于linux下的libpcap。 因此本文着重探讨libpcap库的原理。 二 libp...
阅读全文
基本功能就是来捕获所有流经本网卡的数据包。 实现流程: 查找网络设备 打开网络设备 查找设备信息 输入过滤规则 编译输入规则 设置输入规则 开始捕获数据包 调用数据包分析模块 输出MAC,IP,协议以及数据帧 结束 具体实现代码: #include <stdio.h> #include <pcap.h> #include <time.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <string.h&g...
阅读全文
2018-05-05 22:18 工业·编程 ⁄ 共 4930字 暂无评论
1.获取网络接口 char * pcap_lookupdev(char * errbuf) //上面这个函数返回第一个合适的网络接口的字符串指针,如果出错,则errbuf存放出错信息字符串,errbuf至少应该是PCAP_ERRBUF_SIZE个字节长度的 int pcap_lookupnet(const char * device, bpf_u_int32 * netp, bpf_u_int32 * maskp, char * errbuf) //可以获取指定设备的ip地址,子网掩码等信息 //netp:传出参数,指定网络接口的ip地址 ...
阅读全文
1.Libpcap简介 Libpcap是Packet Capture Libray的英文缩写,即数据包捕获函数库。该库提供的C函数接口用于捕捉经过指定网络接口的数据包,该接口应该是被设为混杂模式。这个在原始套接子中有提到。 著名的软件TCPDUMP就是在Libpcap的基础上开发而成的。Libpcap提供的接口函数实现和封装了与数据包截获有关的过程。 Libpcap提供了用户级别的网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap可以在绝大多数Linux...
阅读全文