3

次のコードは、管理者アカウントでは正常に機能しますが、管理者以外のアカウントでは成功を 2 回出力し、System.Net.Sockets.SocketException (0x80004005) をスローします: アクセス許可によって禁止されている方法でソケットにアクセスしようとしました。これがなぜなのか、誰にも洞察がありますか?

参考までに、ここでの実際の使用例は、同じ PGM アドレスとソケットを使用する複数のアプリケーションです。(マルチキャストを介して) リアルタイム更新をプッシュします。この Poof of concept は、これが私たち自身のライブラリによって引き起こされたものではないということです。

class Program {
    static void Main(string[] args) {

        IPAddress ipAddr = IPAddress.Parse("239.0.0.2");
        IPEndPoint end = new IPEndPoint(ipAddr, 40002);
        Socket[] _sockets = new[] {
            new Socket(AddressFamily.InterNetwork, SocketType.Rdm, (ProtocolType)113 ),
            new Socket(AddressFamily.InterNetwork, SocketType.Rdm, (ProtocolType)113 ),
            new Socket(AddressFamily.InterNetwork, SocketType.Rdm, (ProtocolType)113 )
        };

        foreach (var socket in _sockets)
        {
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            socket.Bind(end);
            Console.WriteLine("Success");
        }

        Console.ReadLine();
    }

}

4

1 に答える 1

3

さて、私はついにこれについてマイクロソフトから連絡を受けました、そして回避策はありません。

リクエストが拒否された行を見つけることができました。

[0] 22E8.1554 :: 08/15 / 2012-10:05:19.015 [sys] address_c491 PgmCreateAddress()-PgmCreateAddress:ERROR-非管理者ユーザーがIP:Port=の2+1ハンドルを開こうとしています

少しのコードレビューで、アクセスが許可されているのは3つのプリンシパルのみであり、それらがAdministrators、LocalService、およびNetworkServiceであることを確認できました。管理者のメンバーであることを除けば、回避策はありません。

これがあなたが聞きたかった答えではなかったことを私は知っています、しかし少なくとも今あなたは確認された答えを持っています。

于 2012-08-16T21:26:12.443 に答える