にDNSプロキシを作成し、検索を行うには、GoogleのDNSサーバーのTCPポート53にクエリを転送して、提供さ答えを返しますGoogleによって。私はUDPポート53からDNSクエリを受け付けCでの単純なDNSプロキシを構築したいC
はい、これは学校のプロジェクトであり、私は始めるためにどこ私にはわからないように混乱しています。
協力いただきありがとうございます!!
にDNSプロキシを作成し、検索を行うには、GoogleのDNSサーバーのTCPポート53にクエリを転送して、提供さ答えを返しますGoogleによって。私はUDPポート53からDNSクエリを受け付けCでの単純なDNSプロキシを構築したいC
はい、これは学校のプロジェクトであり、私は始めるためにどこ私にはわからないように混乱しています。
協力いただきありがとうございます!!
あなたがネットワークへのメッセージを記述するためのAPIを選んだために必要なすべての最初の。 ウィンドウの場合、Winsock APIです。 UNIX系のシステムでは、BSD Sockets APIがあります。
ほとんどのコースでBSD APIが使用されていますが、
今、あなたの手順は次のようになります。
(再びあなたには、いくつかのフィールドを変更する必要があるかもしれません)あなたが要件とラッキー打ってきました - あなたはUDPから行っているので - > TCPは、それが実際にUDPを行うよりもずっと簡単だ - > UDP 。
具体的には、私は何を意味することは外側に面している側は接続指向ソケットを使用しているので、あなたはあまりにも長い間、あなたが新しいを使用すると、すぐにあなたが受け取る応答はあなただけ送信されたクエリに関連しなければならないことを知っているということです各クエリのTCPソケット
外側に面している側は、UDPであった場合には、各応答が関連照会どの把握するために多くの困難になり - 応答は、クエリと同じ順序で到着したプロトコルでの保証はありません。
マルチスレッディングが必要ない場合には、(擬似コードで)
"open" a UDP socket
"bind" that socket to port 53
while (true) {
"recvfrom" a packet from the UDP socket
... and remember the address it was received from
"open" a TCP socket
"connect" it to Google's DNS
"write" the length of the original query (two bytes, network order - RFC 1035)
"write" the contents of the original query
"read" a two byte length header
"read" that many bytes from the TCP socket
"close" the TCP socket
"sendto" those bytes back over the UDP socket to the original client address
}