私のアプリケーションは、複数の宛先ポートから UDP パケットを受信する必要があります (これは善意のアプリケーションであり、スニファではありません)。したがって、PF_PACKET ソケットを使用し、アプリケーション レベルでポート フィルタリングを行うことにしました。
ソケットを作成する方法は次のとおりです。
int g_rawSocket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
UDP パケットを正しく受信しています。ただし、アプリケーションが実行されているカーネルは、タイプ「Destination unreachable」およびコード「Port unreachable」の ICMP パケットを、アプリにパケットを送信しているリモート デバイスに送信しています。これは、ポート番号をソケットにバインドしていないためだと思います。ただし、特に複数のポートをそれにバインドする必要があるため、PF_PACKET ソケットで bind を使用するのが適切かどうか疑問に思いますが、これは不可能だと思います。
コメントをお願いします。