大佬教程收集整理的这篇文章主要介绍了从混杂的网络设备读取,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
s = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL))
这将会将收到的每个数据包的副本发送到您的套接字.尽管如此,您很可能不希望每个数据包.内核可以使用BPF(Berkeley Packet Filter)执行第一级过滤.bBF本质上是一个基于堆栈的虚拟机:它处理一小组指令,例如:
ldh = load halfword (from packet) jeq = jump if equal ret = return with exit code
BPF的退出代码告诉内核是否将数据包复制到套接字.可以使用setsockopt(s,SOL_SOCKET,SO_ATTACH_FILTER)直接写入相对较小的BPF程序. (警告:内核采用一个struct sock_fprog,而不是一个struct bpf_program,不要混合这些,或者你的程序在某些平台上不起作用).
对于任何相当复杂的事情,你真的想使用libpcap. BPF在可以做的事情上受到限制,特别是在每个数据包可执行的指令数量上. libpcap将负责将一个复杂的过滤器分成两部分,内核执行第一级过滤,并且更有能力的用户空间代码丢弃了实际上不想查看的数据包.
libpcap还将内核接口从应用程序代码中抽出出来. Linux和BSD使用类似的API,但是Solaris需要DLPI和Windows使用别的东西.
以上是大佬教程为你收集整理的从混杂的网络设备读取全部内容,希望文章能够帮你解决从混杂的网络设备读取所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。