- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
static unsigned int main_hook(unsigned int hooknum , struct sk_buff *skb , const struct net_device *in , const struct net_device *out, int (*okfn)(struct sk_buff*))
{
int i=0;
struct iphdr *iph = ip_hdr(skb);
unsigned long saddr = 0 , daddr = 0;
unsigned long snet = 0; //dnet =0;
int dst_cnt=0 , src_cnt=0;
//printk("netfilter called\n");
//down(&sema);
Netfilter_Execute++;
saddr = iph->saddr;
daddr = iph->daddr;
当我执行这个模块程序时,linux 关闭并重新启动。当我测试程序时,iph
为空,所以 saddr = iph->saddr 和 daddr = iph->daddr
是错误的。
我不知道为什么 iph = ip_hdr(skb)
返回 NULL
。
最佳答案
问题可能取决于你使用的钩子(Hook),您必须注意与内核路由模块相关的 Hook 位置。
让我给你看这两个例子
如果你使用
NF_IP_LOCAL_OUT
您在钩子(Hook)中收到的数据包不会抛出内核中的路由模块,因此它不会有 header
如果你使用
NF_IP_LOCAL_IN
数据包将抛出路由模块,但路由模块将删除数据包的 header 并将其路由到内部进程
关于c - 我不知道为什么 ip_hdr(skb) 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403691/
当我使用 netfilter API 时, iph = ip_hdr(skb); saddr = iph->saddr; //unsigned long daddr = iph->dad
当我使用内核模块捕获内核中的传出数据包时,我正在使用 kfree_skb() 丢弃该数据包,但它不起作用并且数据包到达其目的地点。我检查 &skb->user 是 1。 change_skb(stru
我想在多个队列中加入一个 skb buff。所以我想到了使用克隆选项。现在我的问题是,如果我在克隆 skb 上执行 kfree_skb,它会释放原始 skb,还是只删除一个引用? 谢谢! 最佳答案 k
我有 net_device,它实现了 ndo_start_xmit 功能。 当 ndo_start_xmit 函数被调用时,我有一个包含 IP 数据包的 skb。我需要公开带有 IP+UDP head
当我与客户保持联系时,我会收到每个客户的报告。一段时间后,程序崩溃了,我收到一条错误消息: skb allocation failed. 我能做什么? 最佳答案 您提供的信息太不完整,无法预测任何事情
我在最新的 linux 内核中经历了数据包传输和数据包接收的过程。我可以看到,skb 中有一个框架,它支持“线性”数据和“分页”数据。 它有一个名为 skb_shared_info 的单独结构来表示页
我有一种情况,我必须只释放 skb 结构本身而不是数据指针。我在我的驱动程序中重用数据指针。请注意,skb 不是克隆。 最佳答案 skb->cloned = 1; atomic_inc(&(skb_s
我发现 skb->users 持有使用这个特定缓冲区的实体数量。 但是既然SKB属于一个特定的套接字,对应于一个特定的进程,它怎么可能有多个用户呢? 最佳答案 sk_buffs 通常代表网络数据包。它
我目前正在编写一个修改数据包有效载荷的内核模块,作为一种学习体验。我已经完成数据包修改,但现在我想在原始数据包之后发送这个新的修改数据包(我不想丢弃原始数据包)。我似乎找不到发送 SKB 进行传输的内
有什么简单的方法可以增加 linux 内核中 SKB 缓冲区的引用计数,以便硬件不会释放它。 我知道使用 skb_clone 引用计数会自动增加,但我想知道在不创建克隆的情况下如何增加 SKB 引用计
我正在研究 8139too.c 驱动程序。对于传输,驱动程序调用 skb_copy_and_csum_dev() 将整个套接字缓冲区复制到一个描述符环中,该环的缓冲区足以容纳整个套接字缓冲区。如果描述
在 Linux 内核的 skb 结构中是否有任何额外的或可用的字段,我可以在处理数据包期间存储我的私有(private)信息?如果有这样一个字段,我该如何分配内存来存储我的数据?基本上我想以微秒分辨率
static unsigned int main_hook(unsigned int hooknum , struct sk_buff *skb , const struct net_device *
我想制作一个内核模块,我可以在其中从我的内核模块发送数据包。问题是我应该如何填充 network_header、传输 header 和 mac header ? 最佳答案 如果你不太关心 mac he
我正在尝试了解嵌入式系统上的 QoS 实现。这是 QoS 的内核级优先级排序吗? 最佳答案 skb->priority 字段用于数据包调度程序和分类器层(如果启用)的 QoS 目的。参见 http:/
我想将 skb 推送到 Linux 网络堆栈的 prerouting 点。有什么办法吗?我使用了 dev_queue_xmit() 和 netif_rx() 函数,但我认为它们不能将 skb 推送到
我正在开发一个内核模块,它通过 netlink 向用户空间发送消息。 创建消息(要发送的消息):skb_out = nlmsg_new(msg_size,0);。 在发送第一条消息之后和发送第二条消息
我正在尝试使用 netfilter Hook 功能从 skbuffs 打印数据。唯一的问题是当我运行这段代码时,我的操作系统卡住并且必须强制关闭。我是内核编码的新手,所以我希望有人能看看这个并解释如何
不久前,我基于 Ashwin Kashyap 的 vnat 模块实现了 ebtables 模块( http://www.research.rutgers.edu/~ashwink/misc_projs
我有一个场景,其中内核构建 SKB,它来到我的 .do_start_xmit Hook ,没有足够的空间用于我的额外 header 。实际上,它发生在先前的 .do_start_xmit Hook 调
我是一名优秀的程序员,十分优秀!