[英]Forwarding UDP packets in C using the socket API
我使用套接字API在C语言中编写了一个内容过滤器,它将拦截DNS请求,并且仅在允许域的情况下才返回响应。 描述这一点的伪代码是:
目前,我的程序正在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.