アプリケーションがパケットを受信したかどうかを確認する方法
質問
私の疑問はかなり奇妙です..
Linuxサーバーでは、DHCPサーバーアプリケーションがポート番号547でdhcpクライアントメッセージを待機しています。
Wiresharkでdhcpクライアントからのメッセージが表示されているのに(Linuxサーバーで実行中).. dhcpサーバーが応答していません。
パケットが実際にdhcpサーバーによって処理されているか、Linux IPスタックによってその間にドロップされていることを確認する方法はありますか?
DHCPサーバーは独自のコードであるため、ログを追加したり、recv関数で確認したりするために変更することはできません。
DHCP固有ではなく、ソケットに基づく一般的な質問と考えてください。私の目的は、統計やその他の情報から、パケットが適切なソケットバッファで受信されたことをどのように知ることができるかです。
解決
これを行うには、デバッグシンボルを使用してDHCPサーバーを構築します。ディストリビューションにはすでに* -dbgパッケージが用意されている可能性があります。gdbのようなデバッガーをプロセスにアタッチすることで、メッセージをインターセプトしてデバッグし、問題がどこにあるかを確認できます。
ただし、最初は通常の可能性、つまりログメッセージを使用して作業しようとします。DHCPデーモンでデバッグログをアクティブ化しようとしましたか?
他のヒント
dhcpサーバーでstraceを実行しても、selectから何も返されない場合は、フレームを受信していない可能性があります。 確認すべき点がいくつかあります
- クライアントが代わりにIPv6DHCP要求を送信していることを確認しますか IPv4(ポート67)?
- サーバーのポート547で他のプロセスがリッスンしていないことを確認してください。
straceコマンドラインオプションを再確認し、デバッグと冗長性を有効にします。straceを使用するときに確認するもう1つのことは、フォークをたどることです... -Ff
お役に立てば幸いです