簡體   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