制作linux下netfilter过滤驱动程序

linux内核态串口读写程序,Linux串口(serial、uart)驱动程序设计 一、核心数据结构串口驱动有3个核心数据结构,它们都定义在1、uart_driveruart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)。struct uart_driver {struct module *owner;/* 拥有该uart_driver的模块,... 阅读详情

本文适合过去一直用VisualStudio进行windows程序设计的人阅读

环境:

服务器端centOS8(必需安装linux内核源码),客户端windows+VisualCode+putty

vscode插件繁多功能强大,我暂时只是将其作为一个远程代码书写工具,用于编写C/C++代码和Makefile文件。编译则是通过putty远程执行make命令。vscode有maketools插件,但插件安装之后的配置对我来说是个麻烦事。所以干脆使用putty,反正也得用它执行其它指令。

我的vscode主要安装有SSH插件和C/C++插件,参见vscode安装笔记 

最重要的是centOS8上必需安装好内核源码,此乃一切工作之基础。 然后在配置C/C++插件时,把其路径include进去,这样vscode才能"认识"代码前面所包含的头文件。

注:centos内核源码路径为usr/src/kernels如果没安装此路径下无内容。安装方式为:

yum install "kernel-devel-uname-r == $(uname -r)"

安装gcc: yum -y install gcc

安装g++: yum install -y gcc-c++

c_pp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/home/szm/linux/IMX6ULL/szm_linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/include/**", 
                "/home/szm/linux/IMX6ULL/szm_linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/arch/arm/include", 
                "/home/szm/linux/IMX6ULL/szm_linux/linux-imx-rel_imx_4.1.15_2.1.0_ga/arch/arm/include/generated/"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4

源码根下的include是主要包含路径,除此处还可能用到其它路径,当发现vscode中头文件有红色波浪线,就在putty中CD到源码根路径后find -name xxx.h头文件,找到后将相关路径添加到上面配置文件中。

发现设置了includepath后头文件还可能飘红,可参考我另一篇博文“centos7 netfilter过滤程序”

搞定头文件后,vscode可能还会报"不允许使用不完整的类类型"这样的错误,经我实践并不影响编译。

下面进入正题,一个最新版的、最简单的netfilter代码:

#include <linux/kernel.h>  
#include <linux/kern_levels.h>
#include <linux/netfilter.h>  
#include <linux/netfilter_ipv4.h>  
#include <linux/init.h> 

  
static struct nf_hook_ops nfho;


unsigned int hook_func(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)  
{  
  printk(KERN_INFO"netflt packet dropped !\n");
  return NF_DROP;
}  

int init_module()  
{  
  nfho.hook = hook_func;
  nfho.hooknum = NF_INET_PRE_ROUTING;
  nfho.pf = PF_INET;
  nfho.priority = NF_IP_PRI_FIRST;
  int r = nf_register_net_hook(&init_net, &nfho);//成功返回0
  printk(KERN_INFO"netflt init ! %d\n",r);
  return 0;
}  

void cleanup_module()
{  
  nf_unregister_net_hook(&init_net,&nfho);
  printk(KERN_INFO"netflt exit !\n");
}

接下来说一下makefile,linux下makefile就是名为"Makefile"的一个文件,没有扩展名。

# KERNELDIR表示内核源码路径
KERNELDIR := /home/szm/linux/IMX6ULL/szm_linux/linux-imx-rel_imx_4.1.15_2.1.0_ga
# 表示当前路径,即pwd
CURRENT_PATH := $(shell pwd)

# 将netflt.c编译成模块
obj-m := netflt.o

build : kernel_modules


# 具体的编译命令,后面的 modules 表示编译模块,-C 表示将当前的工作目录切
# 换到指定目录中,也就是 KERNERLDIR 目录。M 表示模块源码目录,“make modules”命令
# 中加入 M=dir 以后程序会自动到指定的 dir 目录中读取模块的源码并将其编译为.ko 文件。
kernel_modules:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules

clean:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

关于makefile可参阅:https://blog.youkuaiyun.com/daocaokafei/article/details/124641034 

 vscode安装完后会在服务器端用户目录下建.vscode-server目录,编写的代码和makefile文件也在该目录下或其子目录中,putty CD到那里,执行make。如果成功会生成一个.ko文件,insmod这个ko文件,netfilter驱动被加载入内核。由于我这个示例代码太过简单粗暴,直接屏蔽所有IP包,于是insmod后putty和vscode就立刻瘫痪了。。。要恢复得在运营商控制面板那重启服务器。

Linux协议栈-netfilter(1)-框架 1. netfilter框架 Netfilter 是内核中进行数据包过滤,连接跟踪,地址转换等的主要实现框架。当我们希望过滤特定的数据包或者需要修改特定数据包的某些内容再发送出去,这些动作主要都在netfilter中完成。 iptables工具就是用户空间和内核的Netfilter模块通信的手段,iptables命令提供很多选项来实现过滤数据包的各种操作,后面会讲到iptables命令如何 阅读详情

相关推荐

netfilter按IP过滤报文

2.6版内核的网络协议栈较2.4版有所改变,比如sk_buff结构中去掉了nh联合体的定义。在2.6内核中我们如果要得到ip数据包的源节点地址, 需要使用const struct iphdr *iph = ip_hdr(skb); ip_hdr 的定义在linux/ip.h中定义。下面通过一个简单的例子介绍在2.6内核中如何在netfilter上挂载hook函数实现数据包的过滤。

Walter的专栏 1615

linux系统下文件过滤驱动开发(越过内核内存写保护)

linux 越过内核内存写保护方法归纳,目前在工作中遇到的问题及解决方法,供大家参考。 在做文件过滤驱动模块功能时,分别基于X86_64架构 amd64操作系统 和 基于aarch64架构 arm64操作系统上开发实现,在hook内核的函数功能时,遇到内核内存写保护阻止替换函数地址的问题。公司响应国家推行国产化操作系统进程号召,所以是在 统信uos个人版操作系统上开发实施的: Linux uos-PC 5.4.50-amd64-desktop #73 SMP Mon Aug 24 15:42:54 CST

kafetom的博客 2379

linux下的文件过滤驱动

linux文件过滤驱动,编译成模块之后直接加载

linux 过滤驱动 用户态,增强Linux内核中访问控制安全的方法

背景前段时间,我们的项目组在帮客户解决一些操作系统安全领域的问题,涉及到windows,Linux,macOS三大操作系统平台。无论什么操作系统,本质上都是一个软件,任何软件在一开始设计的时候,都不能百分之百的满足人们的需求,所以操作系统也是一样,为了尽可能的满足人们需求,不得不提供一些供人们定制操作系统的机制。当然除了官方提供的一些机制,也有一些黑魔法,这些黑魔法不被推荐使用,但是有时候面对具体...

weixin_42365490的博客 705

netfilter测试实例程序

基于Linux的netfilter框架做的网络过滤测试程序,在五个hook点中选取了2个作为测试钩子点。仅供参考

Linux文件加_解密过滤驱动的设计与实现.pdf

Linux文件加_解密过滤驱动的设计与实现.pdf

Linux Netfilter介绍

netfilter 框架由最著名的 Linux 内核开发人员之一 Rusty Russell 于 1998 年创立,作为对 ipchains(Linux 2.2.x)和 ipfwadm(Linux 2.0.x)的旧实现的改进。netfilter 子系统提供了一个框架,你可以在网络堆栈中的数据包遍历过程中的各个点(netfilter hooks)注册回调并对数据包执行各种操作,比如更改地址或端口、丢弃数据包、日志记录等。

weixin_42915431的博客 7825

VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

[课程学习] VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

夏风喃喃的博客 1604

linux 内核 netfilter 网络过滤模块 (1)-框架

1. netfilter框架 Netfilter 是Linux内核中进行数据包过滤、连接跟踪、地址转换等的主要实现框架。当我们希望过滤特定的数据包或者需要修改数据包的内容再发送出去,这些动作主要都在netfilter中完成。 iptables工具就是用户空间和内核的Netfilter模块通信的手段,iptables命令提供很多选项来实现过滤数据包的各种操作,所以,我们在定义数据包过滤规则时,并...

whatday的专栏 2048

海上AI导航系统:技术架构与行业应用解析

计算机视觉与强化学习技术在海上导航系统中的应用正逐步改变传统航运业。通过多模态传感器融合技术,现代AI导航系统能够实现高精度的物体识别与实时路径规划,有效解决能见度依赖、决策延迟等核心痛点。以Orca AI的SeaPod系统为例,其结合了NVIDIA GeForce RTX 4070的边缘计算能力与多光谱协同识别技术,在恶劣环境下仍能保持稳定性能。这类系统不仅提升了航行安全性,还通过优化航线显著降低燃油消耗,在东京湾、马六甲海峡等繁忙水域展现出巨大价值。随着毫米波雷达融合方案的测试推进,未来海上导航将突破极

weixin_33597080的博客 354

数据分享|1961-2017年中国0.25°×0.25° 逐日地表水文数据集(VIC-CN05.1)

其中,全球径流中心(University of New Hampshire and Global Runoff Data Centre, UNH/GRDC)的复合产流场集成了观测的河道径流和水量平衡模式模拟的地表和地下径流,常被用来评估模拟的径流。在长白山、海北灌丛和千烟洲通量站,模拟与观测的逐月潜热通量的平均NSE为0.61。VIC-CN05.1受益于较准确的大气驱动场、先进的地表水文参数化方案以及更真实丰富的土壤信息,可作为中国水文气象研究的参照数据,用于陆面模式的评估和长期的趋势分析等。

J_Giser的博客 1832

Linux下Netfilter简介

1、什么是Netfilter Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。 iptables是Linux下功能强大的应用层防火墙工具, 说到iptables必然提到Netfilter,iptables是应用层的,其实质是一个定义规则的配...

血饮渊虹的博客 3661

ESP32-IDF开发之旅 外设篇④ 串口通信 Uart

ESP32-S3 UART串口通信详解 本文介绍了ESP32-S3的UART串口通信配置流程,涵盖硬件引脚分配、参数设置、数据收发等关键步骤。

单片机菜鸟哥的博客 495

netfilter

iptables,ip 说明这个工具工作在 ip 层,tables 说明这个工具的工作方式,通过多个表来工作。iptables 基于 netfilter 来实现,常常被用来做防火墙,通过 iptables 可以对报文进行过滤,修改或者 NAT。iptables 包括的概念比较多,功能很丰富,当然也很复杂,本文中只对一些基本的概念和操作做梳理。

weixin_38184628的博客 1415

Python实现PDB文件预处理

蛋白质结构研究依赖PDB文件存储的三维结构数据,但原始文件常含无关的水分子、离子和非标准残基等干扰信息。本文介绍了一个基于BioPython的Python预处理脚本,可自动清理PDB文件,主要功能包括:1)移除短于阈值的蛋白质链;2)过滤非标准氨基酸;3)可选保留水分子和金属离子。该脚本逻辑清晰,支持批量处理,能显著提升结构比对、分子对接等分析前的数据准备效率,为后续生物信息学研究提供更纯净的结构数据基础。

Protein Designer的博客 568

【APM】在Kubernetes中搭建OpenTelemetry+Loki+Tempo+Grafana链路追踪(实战一,Loki日志中查看链路追踪数据)

这对于那些不能直接控制 JVM 启动参数的应用特别有用,比如通过 JNI (Java Native Interface) 调用 JVM 的应用、脚本中嵌入的 JVM 应用,或者一些服务管理工具自动启动的服务。这为用户提供了一个灵活的架构,可以根据需要选择最适合自己的追踪解决方案,或者根据环境(如开发、测试、生产)的不同配置不同的后端。: OpenTelemetry SDK 提供了丰富的特性,如自动追踪上下文传播、手动追踪跨度的创建与关联、标签和事件的添加等,使得追踪数据更加丰富和有用。

CN_Eden 3241

实现最简单的Netfilter模块(Linux网络数据包过滤模块)

一文实现最简单的Linux Netfilter数据包过滤模块

ych4444的博客 1282

AI硬件加速:CPU vs GPU性能对比

AI硬件加速:CPU vs GPU性能对比 关键词:人工智能、硬件加速、CPU、GPU、性能对比、硬件架构、并行计算、优化策略、项目实战 摘要: 本文将深入探讨AI

AI天才研究院 1914

Netfilter 内核数据包过滤框架

作者:属乌鸦的 原文:http://www.hyuuhit.com/2018/07/15/netfilter/ Netfilter 内核数据包过滤框架 Jul 15, 2018 文章目录 1.协议族 2.hook点 3.裁决值 4.例子 5.实现原理 5.1.注册回调函数 5.2.执行回调函数 Netfilter是linux内核中的数据包过滤框架,2.4版本及其后的内核包含该框架,该框架使数据包过滤、网络地址转换(NAT)和其他数据包修改功能成为可能。Netfilt...

maimang1001的专栏 1157

【小白深度教程 1.32】手把手教你从多视角图像进行 3D 重建(SfM 算法)

重建的目标是从一组照片中推导场景的几何结构,假设摄像机位置和内部参数是已知的或可以从图像集中猜测。 这是通过使用多个照片,在其中应用运动结构法(Structure from Motion,SfM)来解决像素级对应问题,部分地恢复3D信息来实现的。

2401_87064292的博客 2160

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Linux 内核开发 - NetFilter

Linux 内核开发 - NetFilter

阿呆的隐秘角落 2974

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Linux netfilter详解

Linuxnetfilter是Linux内核中的网络数据包处理框架,通过在网络数据包路径上设置钩子点来实现防火墙、NAT、端口转发等功能。其核心组件包括钩子点、规则表、处理链和具体规则,支持基于IP、端口、协议等条件进行灵活的数据包过滤和修改。该框架通过用户态工具iptables/nftables进行配置,并支持连接跟踪功能实现状态检测。作为Linux网络功能的基石,netfilter广泛应用于防火墙、地址转换、流量整形等场景。

云原生/运维技术分享 900

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

linux netfilter 过滤数据包,Netfilter-iptabes报文过滤框架(一)

什么是Netfilter/iptableNetfilter/iptables是Linux内核内置的报文过滤框架,程序可以通过该框架完成报文过滤、地址转换(NAT)以及连接跟踪等功能。Netfilter/iptables由两部分组成,一部分是Netfilter的"钩子(hook)",这些"钩子"由Linux内核协议栈提供,内核模块可以通过注册"钩子"来完成各种各样的功能。 另一部分是iptables...

weixin_30045135的博客 620

Linux: Netfilter 简介

Linux,网络,Netfilter

JiMoKuangXiangQu的专栏 2784

Netfilter技术深度解析:Linux内核网络过滤的核心框架

Netfilter是Linux内核中用于网络数据包处理的框架,自2.4.x内核版本起成为核心组件。它通过在内核协议栈中预定义的钩子点(Hook Points)插入自定义处理逻辑,实现对数据包的过滤、修改和重定向。作为Linux防火墙的基础,Netfilter支持数据包过滤网络地址转换(NAT)连接跟踪等核心功能,广泛应用于网络安全、负载均衡和网络调试等领域。Netfilter作为Linux网络栈的核心,提供了强大的灵活性和控制能力。

心若微尘的博客 1625
上一篇: SSH断开连接时长控制ServerAliveInterval
下一篇: tomcat 9 配置https
大狗狗
博客等级 码龄19年 51粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值