繁体   English   中英

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

[英]Forwarding UDP packets in C using the socket API

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

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

目前,我的程序正在UDP端口X上侦听,但问题是我无法访问IP标头,因此不能在保持原始标头的情况下简单地将DNS请求转发至原始服务器。

我尝试使用socket(AF_INET, SOCK_RAW, IPPROTO_UDP)但该端口未绑定在端口X上(可以理解),并且未收到任何流量。

在仍然可以访问传入数据包的IP标头的同时,侦听UDP端口X的最佳方法是什么?

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

基于SOCK_RAW的套接字的功能因您所使用的平台而异。 通常,当您想访问完整的IP数据报信息时,我建议使用Berkeley数据包过滤器来分接寻址到感兴趣的UDP端口的数据链路层帧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM