使用socket BPF/Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)
使用socket BPF
Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)
注意(文中描述的内容):
此外,这段BPF代码还存在的一个问题是,一般情况下tcpdump只返回所捕获包的头96字节,也就是0×60字节,可见代码的倒数第二行是ret #96。对于需要完整的包处理还是不行的,因此你需要将其设置为0×0000ffff,或者在用tcpdump生成的时候用tcpdump -s 65535 -dd … 来生成
1、我的tcpdump 生成BPF code时,长度直接就是0x0000ffff 而非0x60,可能与tcpdump版本有关系
[root@dvrdvs nfs] # ./tcpdump udp -dd
device eth0 entered promiscuous mode
{ 0x28, 0, 0, 0x0000000cdevice eth0 left promiscuous mode
},
{ 0x15, 0, 5, 0x000086dd },
{ 0x30, 0, 0, 0x00000014 },
{ 0x15, 6, 0, 0x00000011 },
{ 0x15, 0, 6, 0x0000002c },
{ 0x30, 0, 0, 0x00000036 },
{ 0x15, 3, 4, 0x00000011 },
{ 0x15, 0, 3, 0x00000800 },
{ 0x30, 0, 0, 0x00000017 },
{ 0x15, 0, 1, 0x00000011 },
{ 0x6, 0, 0, 0x0000ffff },
{ 0x6, 0, 0, 0x00000000 },
[root@dvrdvs nfs] # ./tcpdump -dd ether proto 0x8033
device eth0 entered promiscuous mode
{ 0x28, 0, 0, 0xdevice eth0 left promiscuous mode
0000000c },
{ 0x15, 0, 1, 0x00008033 },
{ 0x6, 0, 0, 0x0000ffff },
{ 0x6, 0, 0, 0x00000000 },
[root@dvrdvs nfs] # ./tcpdump --help
./tcpdump: invalid option -- -
tcpdump version 4.5.1
libpcap version 1.5.2
BPF(BSD Packet Filter)--应用和理念扩展
Linux下PF_PACKET的使用,RARP的server和client程序 (转)
.在使用SOCK_RAW, SOCK_DGRAM和SOCK_PACKET的区别
在socket的第一个参数使用PF_PACKET的时候,上述三种socket的类型都可以使用。但是有区别。
(1)使用SOCK_RAW发送的数据必须包含链路层的协议头,接受得到的数据包,包含链路层协议头。而使用SOCK_DGRAM则都不含链路层的协议头。
(2)SOCK_PACKET也是可以使用的,但是已经废弃,以后不保证还能支持,不推荐使用。
(3)在使用SOCK_RAW或SOCK_DGRAM和SOCK_PACKET时,在sendto和recvfrom中使用的地址类型不同,前两者使用sockaddr_ll类型的地址,而后者使用sockaddr类型的地址。
(4)如socket的第一个参数使用PF_INET,第二个参数使用SOCK_RAW,则可以得到原始的IP包。
使用socket BPF/Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)的更多相关文章
- Linux内核project导论——网络:Filter(LSF、BPF、eBPF)
概览 LSF(Linux socket filter)起源于BPF(Berkeley Packet Filter).基础从架构一致.但使用更简单.LSF内部的BPF最早是cBPF(classic).后 ...
- Linux内核project导论——网络:Netfilter概览
简单介绍 最早的内核包过滤机制是ipfwadm.后来是ipchains.再后来就是iptables/netfilter了. 再往后,也就是如今是nftables. 只是nftables与iptable ...
- Linux内核project导论——网络:路由:路由原理
总览 路由表 IP层通过路由将数据包送达该送达的目的地址,这就要求在整个网络中建立正确的路由表.路由表的内容是记录要到达哪里下一跳须要发到哪里(能够是port能够是ip),如此整个网络在单个节点仅仅知 ...
- Linux内核project导论——linux学习和职业曲线(刚開始学习的人,中级,高级都可參考)
Linux世界介绍 给自己定级 门外汉: 不会安装操作系统 不会用虚拟机(安装和使用) 入门级: 熟悉常见的发行版,甚至装过而且能用一些特殊发行版(比如kali)做过一些简单的图形界面的使用. 会一些 ...
- route-显示并设置Linux内核中的网络路由表
route命令 网络配置 route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两 ...
- route---设置Linux内核中的网络路由表
route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现. 在L ...
- Linux内核project导论——前言
想要研究linux内核.使用linux内核,首先要知道linux内核能做到什么,提供了什么.我看过非常多刚開始学习的人一进入公司就開始使用linux内核开发内核模块.使用的不管是通信方式.内存接口还是 ...
- ubuntu最近升级到最新的linux内核后,网络无法使用怎么办?
答:进入旧的内核中编译需要的网卡模块 1. 启动旧的内核进入系统 2. 安装新内核源码 3. 找出当前的网卡型号 4. 尝试卸载某个与网卡相关的内核模块,观察是否影响当前网卡的使用,如果有影响,那么便 ...
- Linux内核的整体架构
Linux内核的整体架构 作者:蜗蜗 发布于:2014-2-21 13:23 分类:Linux内核分析 原文:http://www.wowotech.net/linux_kenrel/11.html ...
随机推荐
- python IDLE 自动提示功能
\Python27\Lib\idlelib\目录下 config-extensions.def文件修改等待时间 [AutoComplete] enable=1 popupwait=2000(2000表 ...
- Py脚本运行后暂停不退出
方法一:在脚本结束后提示用户按任意键退出 import os os.system('pause') 方法二:在脚本结束后等待输入,按回车键退出 input("") 方法三:在脚本结 ...
- flex socket policy
@ flex的as3代码是具备使用origin tcp socket通信能力的. @ 如果是flex builder本机调试,那么可以直连tcp的server. @ 如果flex发布在webserve ...
- C++使用autoreconf -vi出现error: possibly undefined macro: AC_LIBTOOL_WIN32_DLL If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation.
安装这个:libtool libsysfs yum install -y libtool libsysfs 参考: https://blog.csdn.net/yusiguyuan/article/ ...
- PostgreSQL各命令行工具功能说明
I. SQL 命令 II. PostgreSQL 客户端应用 clusterdb -- 聚簇一个PostgreSQL数据库 createdb -- 创建一个新的PostgreSQL数据库 create ...
- PL/SQL的下载与安装
注意,为了更好的通用性,最好安装32位的. 下载地址为:https://www.allroundautomations.com/bodyplsqldevreg.html 当前最新正式版本为PL/SQL ...
- java多台
多 态★★★★★(面向对象特征之一):函数本身就具备多态性,某一种事物有不同的具体的体现. 体现:父类引用或者接口的引用指向了自己的子类对象.//Animal a = new Cat();父类可以调用 ...
- 解决ElasticSearch5.x中@Field注解之IK分词不能用的问题
一.概述 环境:ElasticSearch版本5.6.3,SpringBoot 2.0.2.RELEASE,索引myIndex 问题描述:使用@Field注解给实体类指定ik分词解析器(ik_smar ...
- nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid”
在Mac上用brew安装Nginx,然后修改Nginx配置文件,再重启时报出如下错误: nginx: [error] invalid PID number "" in " ...
- spring开发文档收集
http://docs.spring.io/spring/docs/4.2.1.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#aop-at ...