我正在使用将拦截DNS请求的套接字API在C中编写内容过滤器,并且仅在允许域时才返回响应。描述这个的伪代码是:
我目前有程序监听UDP端口X,但问题是我无法访问IP标头,因此不能简单地将DNS请求转发到原始服务器,同时保留原始标头。
我尝试过使用socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
但是没有在端口X上绑定(可以理解),并且没有收到任何流量。
关于侦听UDP端口X的最佳方法是什么,同时仍然能够访问传入数据包的IP头?
答案 0 :(得分:1)
我认为在UDP套接字上的recvfrom应该为您提供正确的源地址。您可能仍需要一个原始套接字来转发消息。
答案 1 :(得分:0)
基于SOCK_RAW的套接字的功能因您所在的平台而异。通常,当您想要访问完整的IP数据报信息时,我建议使用Berkeley Packet Filter来点击寻址到感兴趣的UDP端口的数据链路层帧。