最简网卡驱动

news2024/11/16 17:44:57

在内核注册自定义的网卡驱动,并通过打印用户空间和内核的交互数据,可以更深层次的理解网络协议。

驱动代码:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/string.h>
#include <linux/etherdevice.h>
#include <linux/mm_types.h>
#include <linux/slab.h>

struct net_device *mydev;

static int test_start_xmit(struct sk_buff *skb, struct net_device *dev) {
        print_hex_dump(KERN_NOTICE,"",0,16,1,(void*)skb->data,skb->len,false);
        kfree_skb(skb);
        return NETDEV_TX_OK;
}
static int start(struct net_device *dev) {
        return 0;
}

static int stop (struct net_device *dev) {
        return 0;
}
static void stats(struct net_device *dev, struct rtnl_link_stats64 *storage) {
        printk(KERN_ALERT "get stats\n");
        u64 packets, bytes;

        dev_lstats_read(dev, &packets, &bytes);

        storage->rx_packets = packets;
        storage->tx_packets = packets;
        storage->rx_bytes   = bytes;
        storage->tx_bytes   = bytes;
}
static struct net_device_ops net_dev_ops = {
        .ndo_start_xmit = test_start_xmit,
        .ndo_open = start,
        .ndo_stop = stop,
        .ndo_get_stats64 = stats,
};
void add_myself_netdev(void) {
        int ret;
        mydev = alloc_netdev(0, "pan%d", NET_NAME_UNKNOWN, ether_setup);
        if (!mydev) {
                goto out;
        }
        mydev->netdev_ops = &net_dev_ops;
        ret = register_netdev(mydev);
        if (ret) {
                printk(KERN_ALERT "register failed\n");
                free_netdev(mydev);
        }
out:
        printk(KERN_ALERT "add myself net dev failed\n");
}
EXPORT_SYMBOL(add_myself_netdev);


static int hello_init(void) {
        printk(KERN_ALERT "init fishing\n");
        add_myself_netdev();
        //dump_stack();
        return 0;
}

static void hello_exit(void) {
        unregister_netdev(mydev);
        free_netdev(mydev);
        printk(KERN_ALERT "exit fishing\n");
}
//subsys_initcall(hello_init);
module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("shakespeare");

Makefile文件:

ifneq ($(KERNELRELEASE),)
$(info "2nd")

obj-m := fishing.o

else
#kdir := /lib/modules/$(shell uname -r)/build
kdir := /usr/src/linux-headers-$(shell uname -r)
pwd := $(shell pwd)

all:
        $(info "1st")
        make -C $(kdir) M=$(pwd) modules

clean:
        rm *.ko *.o *.order *.mod.c *.symvers *.mod
endif

安装系统头文件,即可进行编译,然后加载到内核

其中,需要配置ip地址

sudo ip link set pan0 up
sudo ip addr add 192.168.90.1/24 dev pan0

使用该网卡发送数据包

nc -u 192.168.90.12 8080

使用tcpdump抓包

sudo tcpdum -i pan0 -nneX

因为192.168.90.12地址的mac不在arp缓存,所以内核会发送arp广播请求。

通过对比内核打印的skb->data内容和tcpdump抓取的报文可知,skb->data的前12个字节是mac地址,接着的0806是arp协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题 2525. 根据规则将箱子分类 (简单)

简单题&#xff0c;直接分类就好 class Solution:def categorizeBox(self, length: int, width: int, height: int, mass: int) -> str:if length > 10**4 or width > 10**4 or height > 10**4 or length*width*height > 10**9:return "Both" if mas…

短链服务如何定制域名

短链接不仅方便推广&#xff0c;而且还能能够保护原来的落地域名&#xff0c;为落地域名提供一个屏障&#xff0c;那么短链接的自定义域名怎么绑定呢&#xff1f;接下来就为大家带来详细的绑定步骤&#xff0c;需要的伙伴可以来看看。 域名绑定步骤 首先您或您的公司团队需要拥…

易点易动:一周完成数万件固定资产管理盘点的解决方案

在现代商业环境中&#xff0c;固定资产管理盘点是企业不可或缺的重要环节。然而&#xff0c;传统的手工盘点方法往往效率低下、耗时费力&#xff0c;且容易出现错误。为了解决这一难题&#xff0c;易点易动固定资产管理系统提供了一种高效、准确的解决方案&#xff0c;使企业能…

【代码随想录】算法训练营 第六天 第三章 哈希表 Part 1

目录 哈希表理论基础 242. 有效的字母异位词 题目 思路 代码 349. 两个数组的交集 题目 思路 代码 202. 快乐数 题目 思路 代码 1. 两数之和 题目 思路 代码 无序集合解法 map解法 哈希表理论基础 哈希表就是之前在数据结构中学过的散列表&#xff0c;通过哈…

2023年中国工业气体行业研究报告

第一章 行业概况 1.1 定义 工业气体行业是一个不可或缺的产业领域&#xff0c;它为多种行业提供关键的产品和服务。工业气体&#xff0c;包括氧气、氮气、氩气、二氧化碳、氦气、氢气及特种气体等&#xff0c;是现代工业生产和科学研究的基础。这些气体在不同的领域具有广泛的…

配置PPPoE拨号双链路上行备份示例

组网图形 图1 设备作为PPPoE Client双链路上行备份组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;设备下行通过GE1/0/0连接局域网用户&#xff0c;上行通过GE2/0/0接入PPPoE Server1作为主链路&#xff0c;通过GE3/0/0接入PPPoE Server2作为备份…

网站管家机器人在为企业获客方面起什么作用?

随着科技的不断进步和人们对便捷服务的需求增加&#xff0c;网站管家机器人成为了现代企业获客的重要工具。作为一种基于人工智能技术的在线助手&#xff0c;网站管家机器人可以与访问企业网站的用户进行智能对话&#xff0c;并提供即时的帮助和解答。 网站管家机器人在为企业获…

图吧工具箱2023,供大家学习研究参考!

1.修复Thaiphoon异常关闭的问题。 2.修复<下载皮肤编辑器>无效的问题。 3.移除OCCT。 4.添加Steam官方下载页的快捷方式。 5.移除老旧的兼容模式。 下载&#xff1a;https://download.csdn.net/download/weixin_43097956/88449046

Si24R2|2.4G单发射芯片 +7dBm可调功率 校讯通

Si24R2是一种通用、低功耗、高性能的2.4GHz无线射频发射芯片&#xff0c;主要用于单向通信系统&#xff0c;以降低系统成B&#xff0c;在运行中与si24r1兼容。 Si24r2具有低功耗和低成B。 它主要用于单向低功率传输系统&#xff0c;如无线控制系统、无线数据采集系统等。 Si2…

8.对象贴地

愿你出走半生,归来仍是少年&#xff01; 在场景中&#xff0c;有时候需要对地物&#xff08;房屋、楼宇&#xff09;进行贴地处理&#xff0c;或者说相对地面高度&#xff08;井盖、井室&#xff09;进行设置。 通过自定义的Terrain切片以及影像瓦片构建的三维场景应该如何获取…

Optuna:带仪表盘的可视化的超参数优化

1、引言 Optuna是一个由日本东京大学开发的自动化超参数优化库&#xff0c;用于机器学习和人工智能。它可用于自动优化神经网络、随机森林等模型的超参数&#xff0c;以改善模型的性能和准确性。Optuna还可以与其他流行的机器学习框架&#xff08;如TensorFlow和PyTorch&#…

企业数据泄密的场景有哪些?怎样斩断员工泄密风险?

企业数据泄露事件频频发生、屡禁不止&#xff0c;根据美国威瑞森通信公司&#xff08;Verizon&#xff09;《2023 Data Breach Investigations Report》&#xff0c;由外部攻击导致的数据泄露事件中&#xff0c;95%的外部攻击是以金钱利益为驱使的。同样&#xff0c;闪捷发布的…

开发者视角下的直播实时美颜SDK:集成和自定义的方法

在今天的数字时代&#xff0c;视频直播已经成为了一种强大的社交工具和娱乐方式。为了让直播内容更吸引人&#xff0c;实时美颜技术已经成为直播应用的重要组成部分。本文将从开发者的角度探讨如何集成和自定义直播实时美颜SDK&#xff0c;以满足用户的美颜需求。 一、什么是直…

算法通关村-----归并排序

基本原理 归并排序采用分治的思想&#xff0c;即分而治之&#xff0c;分就是将一个大问题分成一些小问题求解&#xff0c;治就是将分得的小问题得到的答案和在一起&#xff0c;得到最终的结果。体现在归并排序上&#xff0c;就是将大的数组分成小的序列&#xff0c;一直分到每…

Android问题笔记 - 关于SuperNotCalledException报错异常信息的解决方案

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

解决win10远程桌面连接出现的“身份验证错误,要求的函数不支持”问题

用win10远程左面连接window服务器&#xff0c;出现上面问题。出现身份验证错误&#xff0c;要求的函数不支持。可以使用以下方法来解决&#xff1a; 1、winr键&#xff1a;输入gpedit.msc&#xff0c;然后回车 选择计算机配置>管理模板>系统>凭据分配>加密Oracle/…

四川云汇优想:短视频矩阵运营方案

短视频矩阵运营方案是为了提高短视频平台的用户黏性和活跃度&#xff0c;从而增强用户粘性和平台的商业价值而制定的。下面四川百幕晟小编将对短视频矩阵运营方案进行详细的介绍和分析。 首先&#xff0c;短视频矩阵运营方案要注重用户精细化运营。通过用户画像和兴趣标签&…

apple pencil一定要买吗?平价电容笔推荐

现在&#xff0c;电容笔在在线办公和在线教育领域非常流行&#xff0c;那么平替电容笔会不会代替原装的苹果笔呢&#xff1f;实际上&#xff0c;也不一定要买苹果的原装电容笔。一款平替式电容笔&#xff0c;售价只要一两百块钱&#xff0c;比苹果原装的那款电容笔要便宜不少&a…

众佰诚:抖音小店如何起店名好

在当今社会&#xff0c;随着互联网的发展&#xff0c;越来越多的人选择在网上开设自己的小店。抖音作为目前最受欢迎的短视频平台之一&#xff0c;也吸引了大量的商家入驻。那么&#xff0c;如何在抖音上开设一家有特色的小店呢?首先&#xff0c;我们需要为我们的小店起一个好…

LiveQing视频点播流媒体RTMP推流服务功能-如何配置资源进行轮巡播放视频轮播分屏展示

LiveQing视频点播流媒体RTMP推流服务功能-如何配置资源进行轮巡播放视频轮播分屏展示 1、分屏展示2、右击节点新建分组3、配置轮播间隔(秒&#xff09;4、选择资源5、轮巡播放6、停止分组播7、切换播放的流类型8、RTMP推流视频直播和点播流媒体服务 1、分屏展示 2、右击节点新建…