如何在Linux内核中找到sk_buff的所有者套接字?

2024-01-14

我正在尝试找到一个的所有者插座sk_buff举例来说,skb。我的最终目标是找到特定的 TCP 选项并以某种方式让用户空间应用程序知道。我打算在找到TCP选项时设置一个套接字选项并让用户空间应用程序调用getsockopt()。因此我需要知道之间的所有权sk_buff and sock.

我发现sk_buff中有一个字段:

struct sock *sk;

但是,当我尝试检索该字段时tcp_parse_options http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L3418 in tcp_input.c,我总是得到skb->sk == NULL.

所以我想知道如何才能找到这里的主人?

另外,我发现 3 个地方似乎设置了所有者套接字:

http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4181 http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4181

http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4196 http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4196

http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4456 http://lxr.free-electrons.com/source/net/ipv4/tcp_input.c?v=3.11#L4456

我还添加了一个新标志sk_buff用于指示并将其设置为tcp_parse_options。然后我在这三个地方检查这个标志。但它们都没有显示标志已设置,因此我无法确定是否设置套接字选项。

对于这个问题有什么想法或建议吗?

提前致谢!


从 sk_buff (skb) 中,您可以通过如下方式获取袜子 (sk):

const struct tcphdr *th = tcp_hdr(skb);
struct sock *sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
if (sk)
    struct socket* = sk->sk_socket;

这对我有用。不要忘记添加正确的标题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Linux内核中找到sk_buff的所有者套接字? 的相关文章

  • linux-x64 二进制文件无法在 linuxmusl-x64 平台上使用错误

    我正在安装Sharp用于使用 package json 的 Nodejs 项目的 docker 映像上的映像压缩包 当我创建容器时 我收到有关 Sharp 包的以下错误 app node modules sharp lib libvips
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 如何使用waf构建共享库?

    我想使用构建一个共享库waf http code google com p waf 因为它看起来比 GNU 自动工具更容易 更简洁 到目前为止 我实际上有几个与我开始编写的 wscript 有关的问题 VERSION 0 0 1 APPNA
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 最好的 Flash 音频/视频 + 交互服务器?

    我正在寻找有关 Flash 实时服务器的建议 目前 我们使用 Moock 的组合Unity http www moock org unity and Red5 http osflash org red5 但有几个问题 首先 我们正在转向 A
  • module_init() 与 core_initcall() 与 Early_initcall()

    在驱动程序中 我经常看到使用这三种类型的初始化函数 module init core initcall early initcall 在什么情况下我应该使用它们 另外 还有其他的初始化方式吗 它们决定内置模块的初始化顺序 司机们会使用dev
  • 如何在 Linux 内核中定义并触发我自己的新软中断?

    我想在 Linux 内核中创建自己的软中断 这是正确的方法吗 In the init我想触发该模块的softirq我将添加一个调用 394 void open softirq int nr void action struct softir
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因

随机推荐

  • 将字符串中的数字范围替换为单个数字

    有没有办法将字符串中的数字范围替换为单个数字 数字的范围可以是 n n 最有可能是 1 15 也可以是 4 10 范围可以用 a 表示 a lt I would like to buy 1 3 cats 或与单词 b 一起使用 例如 to
  • 跨两个数据源的事务管理(ChainedTransactionManager)-SpringBoot

    为什么 Spring ChainedTransactionManager 被弃用 spring 是否提供任何替代库来支持多个事务管理器 我的用例 我们正在构建一个连接到两个数据源 db1 和 db2 的 Spring Boot 应用程序 它
  • 正确停止 Tika 服务器

    为了启动可以从 localhost 以外的主机访问的 Tika 服务器 我们知道要走的路是 假设我有版本 1 7 并且想要在端口 9998 上运行 java jar tika server 1 7 SNAPSHOT jar host 0 0
  • 未捕获的类型错误:$(...).owlCarousel 不是函数

    我已将 owlCarousel 添加到我的页面 但我收到这个错误 并坚持了几个小时 HTML code custom js 中的函数 owl hero owlCarousel navigation true Show next and pr
  • 如何从 Twitter API 和趋势线获取关注者数量

    我正在为 Twitter 编写一些关于随时间推移的关注者数量的报告 但是经过大量搜索和反复试验后 我无法获得随时间推移的关注者数量 特别是过去的关注者数量 我知道有一个 API 可以获取关注者的个人 userId 但这对于我的需要来说有点过
  • Jenkins Subversion 签出失败 - “E175002:CRLF 预计在块末尾:-1/-1”

    我有一个 Jenkins v2 107 2 实例 作为 Windows 服务运行 它正在通过 Subversion 从 Visual SVN 服务器 在单独的 Windows PC 上 检查多个项目 其中一个项目 最大的 2 7GB 偶尔会
  • 如何使用 jquery 在 iframe 中选择标签?

    我试图弄清楚如何选择然后修改 HTMLiframe我生成 iframe 显示各种媒体 图像 pdf 等 为了显示不同的项目 我最初使用如下方式创建它 mydiv html 然后 根据需要 使用如下内容更新其内容 myiframe attr
  • 用于在 HTML 表中查找行索引的 jQuery 语法

    1 如何查找 HTML 表格中的行号 索引 生成的表没有任何行 ID 例如 我生成了一个纯 HTML 表格 其中有 10 行 我正在向该表动态添加行 在现有行之间 由于我要添加新行 现有的行索引将会更改 现在我需要在添加新行之前找到每行的索
  • 如何避免在 Windows 中过度填充 PATH 环境变量?

    我想知道您使用什么方法来管理系统中的可执行文件 例如 我几乎可以通过命令行访问所有内容 但现在我遇到了路径字符串的限制 因此我无法添加更多目录 那么你有什么推荐呢 很久以前 我尝试在属于该路径的目录中使用可执行文件的软链接 但这种方法不起作
  • 是否可以对两个转换字符组合使用格式修饰符?

    我知道如何使用 log4j 输出类名和方法名 这两个字段都可以单独对齐和填充 例如这个模式 d ISO8601 5p 10C 1 10M m n 产生类似的东西 2012 09 20 08 25 12 111 WARN Class meth
  • Windows 无法在本地计算机上启动 Apache CouchDB 服务

    我已在 Windows 计算机上安装了 CouchDB 但在启动 CouchDB 服务时 我收到如下消息 Windows 无法在本地计算机上启动 Apache CouchDB 服务 该服务没有返回错误 这可能是 Windows 内部错误或内
  • 使用bundle运行gitlab服务器:命令未找到错误

    我不知道发生了什么 sudo 服务 gitlab 启动 Starting both the GitLab Unicorn and Sidekiqscript web line 21 bundle command not found 查看我的
  • 如何在 cygwin 上安装 cURL?

    我尝试在 cygwin 上启用curl 但它说bash curl command not found 如何在 cygwin 上安装curl 我刚刚遇到这个 1 从以下位置找到cygwin setup exe文件http cygwin com
  • 使文本高度为 div 的 100%?

    我正在尝试使文本的高度为 100 div但它不起作用 它只是变成了100 body font size 有什么办法让它跟随div高度吗 The div高度是整个页面的 4 当您调整大小 更改分辨率时 我不希望文本跟随它 为了获得我想要的结果
  • 是否可以在打字稿中创建动态 getter/setter?

    我是 TypeScript 新手 我正在尝试将我们的应用程序从 es2016 重写为 TypeScript 我的任务是拥有一个具有数据属性的类 并使数据对象中的每个元素可用作类属性 我被这段 JavaScript 代码困住了 for let
  • Django:关闭http响应消息的控制台输出

    所以我们用 django 制作了一个应用程序 每次收到请求时它都会在控制台上打印所有这些 http 响应消息 Date String GET urlpath blah blah 200 216 Date String DELETE anot
  • jQuery 数据表问题

    当使用jQuery 数据表插件 http datatables net 为什么我会收到此错误 k 未定义 style typeof e saved aaSorting 未定义 我发布这个答案是为了记录一些东西以供自己将来参考 我希望它能对其
  • EqualityComparer.Default 不够聪明

    我正在阅读源代码EqualityComparer
  • 带有圆角的 AppWidget 图像

    因此 我通过在应用程序的主布局中向用户显示的各种视图进行动画处理 在应用程序中动态创建图像 目前 我正在相对布局中生成场景 将布局图像作为位图 然后将位图保存到 SD 以便 appwidget 通过 uri 访问 这一切都工作得很好 但是
  • 如何在Linux内核中找到sk_buff的所有者套接字?

    我正在尝试找到一个的所有者插座sk buff举例来说 skb 我的最终目标是找到特定的 TCP 选项并以某种方式让用户空间应用程序知道 我打算在找到TCP选项时设置一个套接字选项并让用户空间应用程序调用getsockopt 因此我需要知道之