先 放一段示例程序,这段程序我在RH9和AS4下编译通过,程序功能就是用从2.2内核加入的PF_PACKET协议族来进行底层数据包捕获并显示。 PF_PACKET协议族是与系统TCP/IP协议栈并行的同级别模块,即从PF_PACKET协议族得到的数据包是没有经过系统TCP/IP协议栈处理 的。而且,通过设置混杂模式,可以很容易的实现sniffer。 #...
1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接收ip数据包,不能用IPPROTO_IP,因为如果是用了IPPROTO_IP,系统根本就不知道该用什么协议。 2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧 3.socket(AF_INET, SOCK_PACKET, htons(...
先 放一段示例程序,这段程序我在RH9和AS4下编译通过,程序功能就是用从2.2内核加入的PF_PACKET协议族来进行底层数据包捕获并显示。 PF_PACKET协议族是与系统TCP/IP协议栈并行的同级别模块,即从PF_PACKET协议族得到的数据包是没有经过系统TCP/IP协议栈处理 的。而且,通过设置混杂模式,可以很容易的实现sniffer。 #...
最后,您可以将过滤器附加到套接字,以便只接受与过滤器规则匹配的数据包并将其传递给套接字。结合PF_PACKET套接字,此机制允许您有效地从LAN中嗅探选定的数据包 即使我们使用PF_PACKET套接字构建我们的嗅探器,Linux套接字过滤器(LSF)也不仅限于此。事实上,过滤器也可用于普通的TCP和UDP套接字来过滤掉不需要的数...
它是一种基于套接字的接口,通过创建一个特殊类型的套接字,用户可以利用 pf_packet 接口收发数据包。 二、pf_packet 的使用步骤 1. 创建套接字 使用socket 函数创建一个 PF_PACKET 类型的套接字,并指定协议类型为 ETH_P_ALL,表示接收所有类型的数据包。 2. 绑定接口 使用bind 函数将套接字与特定的网络接口...
我们一起来看看程序1,我们打开一个属于PF_PACKET-family 协议簇的SOCKET,指定一个SOCK_RAW socket类型和IP相关协议类型。这时我们开始从SOCKET抓包,在一些相关检查后.我们开始得到从链路层和IP层抓来的头部信息,。通过阅读程序一,你将会发现让应用程序从网络层抓包其实并不难!
三、AF_PACKET/PF_PACKET AF:Address Family PF:Protocol families 两个的数值相等。 原始套接字,libpcap/tcpdump 就工作在这里,抓取数据包: int sock_raw_fd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); 四、tc tc全称为traffic control,是iproute2包中控制内核中流量的工具。可以对流量进行限速...
socket(PF_PACKET,SOCK_RAW,htos(ETH_P_IP)):表示获得IPV4的数据链路层帧,即数据包含以太网帧头。14+20+(8:udp 或 20:tcp) ETH_P_IP: 在<linux/if_ether.h>中定义,可以查看该文件了解支持的其它协议。 SOCK_RAW, SOCK_DGRAM两个参数都可以使用,区别在于使用SOCK_DGRAM收到的数据不包括数据链路层协议头...
PF_PACKET在内核的流程 2013-08-06 17:32 −PF_PACKET在内核的流程 套接字创建 packet_create() --> 赋值packet_ops 接收流程 packet_recvmsg() skb_recv_datagram() __skb_recv_datagram() --> 检测sk->... laughingLau 1 2116 使用socket BPF/Linux内核工程导论——网络:Filter(LSF、BPF、eBPF) ...
libpcap绕过了Linux内核收包流程中协议栈部分的处理,使得用户空间API可以直接调用套接字PF_PACKET从链路层驱动程序中获得数据报文的拷贝,将其从内核缓冲区拷贝至用户空间缓冲区(「第4次拷贝」) libpcap-mmap libpcap-mmap是对旧的libpcap实现的改进,新版本的libpcap基本都采用packet_mmap机制。PACKET_MMAP通过mmap,减...