如何在内核空间中附加数据包?

如何在内核空间中附加数据包?,第1张

概述我试图在内核空间的数据包上附加一些数据.我有一个echo客户端和服务器.我输入命令行,如:./client“message”,服务器只是回复它.服务器使用./server运行.现在,客户端和服务器位于两台不同的计算机上(可能是VM).我正在编写一个在客户机上运行的内核模块.它的工作是在数据包离开机器时在“消息”之后附加“12345”.我将在下面介绍代码./*

我试图在内核空间的数据包上附加一些数据.我有一个echo客户端和服务器.我输入命令行,如:./clIEnt“message”,服务器只是回复它.服务器使用./server运行.

现在,客户端和服务器位于两台不同的计算机上(可能是VM).我正在编写一个在客户机上运行的内核模块.它的工作是在数据包离开机器时在“消息”之后附加“12345”.我将在下面介绍代码.

/* * This is ibss_obsf_cat.c */#include 

我想从内核空间发送客户端机器时将“消息”变为“message12345”.这样服务器将获得“message12345”并回显它,客户端将只读取“message12345”但是我遇到了skb_put()和skb_add_data()函数的问题.我不明白我犯了什么错误.如果有人可以帮我解决这些问题,我将非常感激.提前致谢.为方便起见,我也给了Makefile.这适用于分发内核,而不适用于构建的内核.

#If KERNELRELEASE is defined,we've been invoked from the#kernel build system and use its languageifneq ($(KERNELRELEASE),)    obj-m := ibss_obsf_cat.o#Otherwise we were called directly from the command#line; invoke the kernel build system.else    KERNELDIR ?= /lib/modules/$(shell uname -r)/build    PWD := $(shell pwd)default:    $(MAKE) -C $(KERNELDIR) M=$(PWD) modulesendif

现在我完全相信
    skb-> end – skb-> tail
是如此之小,我将不得不在内核空间中创建新的数据包.我用过
    alloc_skb()
    skb_reserve()
    skb_header_pointer()
以及用于创建新skb的其他有用的skb函数,但我想到的是如何在数据包流路径中路由新创建的数据包.如何使用
    ip_route_me_harder()
我查看了xtables-addons包中的建议,但是他们使用的函数与linux内核中的函数不同.任何建议都受到欢迎.最佳答案大约一年前的内核2.6.26我这样做了:

// Do we need extra space?if(len - skb_tailroom(skb) > 0){  // Expand skb tail until we have enough room for the extra data  if (pskb_expand_head(skb,extra_data_len - skb_tailroom(skb),GFP_ATOMIC)) {    // allocation Failed. Do whatever you need to do  }  // Allocation succeeded  // Reserve space in skb and return the starting point  your_favourite_structure* ptr = (your_favourite_structure*)                                   skb_push(skb,sizeof(*ptr));   // Now either set each fIEld of your structure or memcpy into it.  // Remember you can use a char*}

别忘了:

>重新计算UDP校验和,因为您更改了传输数据中的数据.
>更改ip标头中的字段tot_len(总长度),因为您已将数据添加到数据包.
>重新计算IP标头校验和,因为您更改了tot_len字段.

额外说明:
这只是一件简单的事情.我在你的代码中看到你将tmp分配为一个200字节的数组并使用它来存储你的消息数据.如果你发送一个更大的数据包,你将很难调试这个,因为内存崩溃是因为内存崩溃太痛苦了. 总结

以上是内存溢出为你收集整理的如何在内核空间中附加数据包?全部内容,希望文章能够帮你解决如何在内核空间中附加数据包?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1046494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)