nfq_get_payload 如何构造其返回数据?

2024-03-28

首先,我尝试从 Netfilter 队列有效负载的有效负载中获取源地址和目标端口(使用 nfq_get_payload 函数检索有效负载)。下面的问题提出了同样的问题并得到了正确的答案:

如何从 iptables 队列中的数据包中提取源端口号和目标端口号 https://stackoverflow.com/questions/12673079/how-to-extract-source-and-destination-port-number-from-packet-in-queue-of-iptabl/12685540#12685540

不幸的是,没有解释为什么在地址中添加 20 和 22 可以让您在正确的位置阅读信息。我认为这是因为数据的结构(显然),但如果有一个定义的结构,它是什么?

该文档没有明确解释数据的格式,只是“此函数检索的数据类型将取决于 nfq_set_mode() 函数设置的模式”,但 set_mode 的文档没有提及任何有关数据的内容类型和来源不会立即透露任何内容。

我觉得这一定是我所缺少或不理解的常见网络编程结构的核心内容。

注:nfq_get_payload函数:http://www.netfilter.org/projects/libnetfilter_queue/doxygen/group__Parsing.html#gaf79628558c94630e25dbfcbde09f2933 http://www.netfilter.org/projects/libnetfilter_queue/doxygen/group__Parsing.html#gaf79628558c94630e25dbfcbde09f2933


我设法解决了这个问题,我将把它留在这里供其他人找到。

有效负载以 iphdr 结构开始。 iphdr 结构体有一个协议字段,例如 tcp,如果是 tcp 那么 iphdr 结构体后面的数据就是 tcphdr 结构体,如果是 udp,那么还有另一个 struct hdr 结构体,依此类推,对于 icmp 等等。

要访问端口,假设 q_data 是指向 nfq_data 结构的指针:

unsigned char *data;
nfq_get_payload(q_data, (unsigned char**)&data);
struct iphdr * ip_info = (struct iphdr *)data;
if(ip_info->protocol == IPPROTO_TCP) {
    struct tcphdr * tcp_info = (struct tcphdr*)(data + sizeof(*ip_info));
    unsigned short dest_port = ntohs(tcp_info->dest);
} else if(ip_info->protocol == IPPROTO_UDP) {
    //etc etc
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nfq_get_payload 如何构造其返回数据? 的相关文章

随机推荐

  • this.props.navigation.dispatch 与 this.props.navigation.navigate 之间的区别?

    我在反应导航问题部分看到很多人使用this props navigation dispatch以编程方式导航 是否有任何特定的原因或用例可以使用它this props navigation navigate 看来你可以向调度函数传递更多选项
  • Paypal 定期付款交易错误:11502:令牌无效

    我是贝宝新手 我需要为我的客户实施订阅 定期付款 我正在使用贝宝沙箱来实施 我遵循贝宝坚持创建定期付款资料的方式 从 SetExpressCheckout GetExpressCheckOut 和 DoExpressCheckOut 获得
  • Pyspark:如果列包含来自另一列的字符串(SQL LIKE 语句),则过滤数据框

    我正在尝试按以下方式过滤我的 pyspark 数据框 我有一列包含long text和一列包含数字 如果长文本包含number我想保留这个专栏 我正在尝试使用 SQLLIKE声明 但似乎我无法将其应用到另一列 此处number 我的代码如下
  • 为什么我不能使用“名称”作为变量/对象名称? [复制]

    这个问题在这里已经有答案了 当像这样声明一个对象时 var name firsName nur lastName jaman fullName function return this firsName this lastName cons
  • Akeneo:克隆产品

    我们需要在 Akeneo 1 4 中克隆产品 仅 SKU 应更改 我发现了类似的问题 1 http www akeneo com forums topic easy way to clone product 2 http www akene
  • 当应用程序进入后台时关闭 modalviewcontroller

    当应用程序进入后台时 我需要自动关闭我的 uiimagepicker 模态视图控制器 我尝试将代码放入 viewdiddissappear 方法中的解雇模态视图控制器代码 但它没有被调用 所以我在 appdelegate 中引用了视图控制器
  • 在 Bootstrap 模态中滚动到 DIV

    我有 3 个按钮 它们将触发相同的模式 但需要滚动到不同的部分 我正在努力实现这一目标 请帮忙 a class btn goto section 1 Launch modal a a class btn goto section 2 Lau
  • 如何优化 Express.js 路线?

    我正在开发一个保留区域 其中包含以下几页 dashboard dashboard profile dashboard user dashboard view 这是一个简单的用户控制面板 目前我有四种路线 app all dashboard
  • 复制文件名中带有方括号 [ ] 的文件并使用 * 通配符

    我在 Windows 7 上使用 PowerShell 并编写一个脚本将一堆文件从一个文件夹结构复制到另一个文件夹结构 有点像编译 PowerShellCopy Itemcmdlet 认为方括号 是某种通配符 并且由于某种原因我无法转义它们
  • 超正方错误 - 图像太大

    对于大小为 5 MB 的图像 我从 tesseract 收到以下错误 Tesseract 开源 OCR 引擎 v3 01 与 Leptonica 第0页 图片太大 39667 56133 处理过程中出错 文件大小是否有限制 或者是否有参数可
  • 使用 CSS 渐变时添加图像?

    我正在尝试使用 CSS 渐变以及渐变顶部的图标创建一个按钮 我尝试了两种方法 但都失败了 First btn background webkit gradient linear 0 0 0 89 from 3171CA to 15396F
  • Wavesurfer.js 工作正常,但react-wavesurfer 有问题

    我在使用 Wavesurfer 的网络项目中遇到了障碍 我已经在我的项目中安装了wavesurfer js 和react wavesurfer 作为节点模块 Wavesurfer js 似乎工作正常 但 React wavesurfer 似
  • 两遍连接组件,组件数量问题

    两遍连通分量算法正在检测一幅图像中的单独分量 每次检测后我都会保存每个component作为不同的图像 要显示每个component在单独的图像上 我使用多个 if 条件 但是这些if conditions每当图像中每个组件都有很多形状时
  • 为什么调用函数时要使用“go”关键字?

    我正在查看 TCP 服务器的示例 他们定义了一个函数并用以下方式调用它 go handleRequest conn 我觉得看到这个很奇怪go关键字 所以我尝试了没有 handleRequest conn 令我惊讶的是 这有效 如果两者的工作
  • Sphinx警告预加载:无法打开

    我安装了sphinx搜索服务 为了创建索引 我使用下一个命令 sudo searchd c etc sphinxsearch sphinx conf 在终端中收到警告消息后 使用配置文件 etc sphinxsearch sphinx co
  • 十月 CMS:无法创建表单小部件

    我是 October CMS 的新手 正在学习创建表单小部件 但我收到以下错误 The partial field actorbox htm is not found opt lampp htdocs octobermovies modul
  • UIDynamicItem 手动更新转换

    我知道外部变化center bounds and transform之后将被忽略UIDynamicItems init 但我需要手动更改transform of UIView在UIDynamicAnimator system 每次我改变tr
  • 通过 for-compression 线程“Try”

    触发于另一个问题 https stackoverflow com revisions 5cbd16fb 14e0 4870 aae7 b140601b1e3e view source 不过后来被编辑掉了 我想尝试一下链接调用 Scala 2
  • 使用 ETW 记录异常的最佳方法是什么?

    是否有使用 ETW 记录异常的标准方法 据我所知 执行此操作的唯一方法是记录消息以及可能的内部异常消息 因为异常类型没有强类型参数 当启用时 所有 CLR 异常 第一次机会以及可能最终导致应用程序崩溃的异常 都会由 CLR 运行时提供程序记
  • nfq_get_payload 如何构造其返回数据?

    首先 我尝试从 Netfilter 队列有效负载的有效负载中获取源地址和目标端口 使用 nfq get payload 函数检索有效负载 下面的问题提出了同样的问题并得到了正确的答案 如何从 iptables 队列中的数据包中提取源端口号和