gpt4 book ai didi

c - 使用套接字 API 在 C 中转发 UDP 数据包

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:57 28 4
gpt4 key购买 nike

我正在使用将拦截 DNS 请求的套接字 API 在 C 中编写一个内容过滤器,并且仅在域被允许时才返回响应。描述这个的伪代码是:

  1. 将所有 DNS 查询重定向到监听 UDP 端口 X 的内容过滤程序。
  2. 内容过滤程序提取正在查询的域并确定是否允许。
  3. 如果允许,则内容过滤程序将原始 DNS 请求数据包转发到原始目标 DNS 服务器,同时保持原始源和 IP+端口,以便 DNS 服务器可以将回复直接发送回客户端。
  4. 如果域不允许,则不会发送回复。

我目前有程序在 UDP 端口 X 上监听,但问题是我无法访问 IP header ,因此不能简单地将 DNS 请求转发到原始服务器,同时保持原始 header 。

我尝试过使用 socket(AF_INET, SOCK_RAW, IPPROTO_UDP) 但它没有绑定(bind)到端口 X(可以理解),也没有收到任何流量。

在仍然能够访问传入数据包的 IP header 的同时监听 UDP 端口 X 的最佳方法是什么?

最佳答案

我认为 UDP 套接字上的 recvfrom 应该会给你正确的源地址。您可能仍然需要一个原始套接字来转发消息。

关于c - 使用套接字 API 在 C 中转发 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924322/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com