SocketPermission Klasa

Definicja

Kontroluje prawa do wprowadzania lub akceptowania połączeń na adresie transportowym.Controls rights to make or accept connections on a transport address.

public ref class SocketPermission sealed : System::Security::CodeAccessPermission, System::Security::Permissions::IUnrestrictedPermission
[System.Serializable]
public sealed class SocketPermission : System.Security.CodeAccessPermission, System.Security.Permissions.IUnrestrictedPermission
type SocketPermission = class
    inherit CodeAccessPermission
    interface IUnrestrictedPermission
Public NotInheritable Class SocketPermission
Inherits CodeAccessPermission
Implements IUnrestrictedPermission
Dziedziczenie
SocketPermission
Atrybuty
Implementuje

Przykłady

Poniższy przykład ilustruje sposób użycia klasy SocketPermission do ustawiania, zmieniania i wymuszania różnych ograniczeń dostępu gniazda.The following example demonstrates how to use the SocketPermission class to set, change, and enforce various socket access restrictions.

// Creates a SocketPermission restricting access to and from all URIs.
SocketPermission^ mySocketPermission1 = gcnew SocketPermission( PermissionState::None );

// The socket to which this permission will apply will allow connections from www.contoso.com.
mySocketPermission1->AddPermission( NetworkAccess::Accept, TransportType::Tcp,  "www.contoso.com", 11000 );

// Creates a SocketPermission which will allow the target Socket to connect with www.southridgevideo.com.
SocketPermission^ mySocketPermission2 = gcnew SocketPermission( NetworkAccess::Connect,TransportType::Tcp, "www.southridgevideo.com",11002 );

// Creates a SocketPermission from the union of two SocketPermissions.
SocketPermission^ mySocketPermissionUnion =
   (SocketPermission^)( mySocketPermission1->Union( mySocketPermission2 ) );

// Checks to see if the union was successfully created by using the IsSubsetOf method.
if ( mySocketPermission1->IsSubsetOf( mySocketPermissionUnion ) &&
   mySocketPermission2->IsSubsetOf( mySocketPermissionUnion ) )
{
   Console::WriteLine(  "This union contains permissions from both mySocketPermission1 and mySocketPermission2" );
   
   // Prints the allowable accept URIs to the console.
   Console::WriteLine(  "This union accepts connections on :" );

   IEnumerator^ myEnumerator = mySocketPermissionUnion->AcceptList;
   while ( myEnumerator->MoveNext() )
   {
      Console::WriteLine( safe_cast<EndpointPermission^>( myEnumerator->Current )->ToString() );
   }
   
   // Prints the allowable connect URIs to the console.
   Console::WriteLine(  "This union permits connections to :" );

   myEnumerator = mySocketPermissionUnion->ConnectList;
   while ( myEnumerator->MoveNext() )
   {
      Console::WriteLine( safe_cast<EndpointPermission^>( myEnumerator->Current )->ToString() );
   }
}

// Creates a SocketPermission from the intersect of two SocketPermissions.
SocketPermission^ mySocketPermissionIntersect =
   (SocketPermission^)( mySocketPermission1->Intersect( mySocketPermissionUnion ) );

// mySocketPermissionIntersect should now contain the permissions of mySocketPermission1.
if ( mySocketPermission1->IsSubsetOf( mySocketPermissionIntersect ) )
{
   Console::WriteLine(  "This is expected" );
}

// mySocketPermissionIntersect should not contain the permissios of mySocketPermission2.
if ( mySocketPermission2->IsSubsetOf( mySocketPermissionIntersect ) )
{
   Console::WriteLine(  "This should not print" );
}

// Creates a copy of the intersect SocketPermission.
SocketPermission^ mySocketPermissionIntersectCopy =
   (SocketPermission^)( mySocketPermissionIntersect->Copy() );
if ( mySocketPermissionIntersectCopy->Equals( mySocketPermissionIntersect ) )
{
   Console::WriteLine(  "Copy successfull" );
}

// Converts a SocketPermission to XML format and then immediately converts it back to a SocketPermission.
mySocketPermission1->FromXml( mySocketPermission1->ToXml() );

// Checks to see if permission for this socket resource is unrestricted.  If it is, then there is no need to
// demand that permissions be enforced.
if ( mySocketPermissionUnion->IsUnrestricted() )
{
   //Do nothing.  There are no restrictions.
}
else
{
   // Enforces the permissions found in mySocketPermissionUnion on any Socket Resources used below this statement. 
   mySocketPermissionUnion->Demand();
}

IPHostEntry^ myIpHostEntry = Dns::Resolve(  "www.contoso.com" );
IPEndPoint^ myLocalEndPoint = gcnew IPEndPoint( myIpHostEntry->AddressList[ 0 ], 11000 );

Socket^ s = gcnew Socket( myLocalEndPoint->Address->AddressFamily,
   SocketType::Stream,
   ProtocolType::Tcp );
try
{
   s->Connect( myLocalEndPoint );
}
catch ( Exception^ e ) 
{
   Console::Write(  "Exception Thrown: " );
   Console::WriteLine( e->ToString() );
}

// Perform all socket operations in here.
s->Close();

     // Creates a SocketPermission restricting access to and from all URIs.
     SocketPermission mySocketPermission1 = new SocketPermission(PermissionState.None);

     // The socket to which this permission will apply will allow connections from www.contoso.com.
     mySocketPermission1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.contoso.com", 11000);

     // Creates a SocketPermission which will allow the target Socket to connect with www.southridgevideo.com.
     SocketPermission mySocketPermission2 =
                                new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "www.southridgevideo.com", 11002);

     // Creates a SocketPermission from the union of two SocketPermissions.
     SocketPermission mySocketPermissionUnion = 
                                (SocketPermission)mySocketPermission1.Union(mySocketPermission2);

     // Checks to see if the union was successfully created by using the IsSubsetOf method.
     if (mySocketPermission1.IsSubsetOf(mySocketPermissionUnion) && 
           mySocketPermission2.IsSubsetOf(mySocketPermissionUnion)){
          Console.WriteLine("This union contains permissions from both mySocketPermission1 and mySocketPermission2"); 

          // Prints the allowable accept URIs to the console.
          Console.WriteLine("This union accepts connections on :");

          IEnumerator myEnumerator = mySocketPermissionUnion.AcceptList;
       while (myEnumerator.MoveNext()) {
               Console.WriteLine(((EndpointPermission)myEnumerator.Current).ToString());
            }      

             // Prints the allowable connect URIs to the console.
          Console.WriteLine("This union permits connections to :");

          myEnumerator = mySocketPermissionUnion.ConnectList;
       while (myEnumerator.MoveNext()) {
               Console.WriteLine(((EndpointPermission)myEnumerator.Current).ToString());
            }      

           }


     // Creates a SocketPermission from the intersect of two SocketPermissions.
     SocketPermission mySocketPermissionIntersect = 
                               (SocketPermission)mySocketPermission1.Intersect(mySocketPermissionUnion);

     // mySocketPermissionIntersect should now contain the permissions of mySocketPermission1.
     if (mySocketPermission1.IsSubsetOf(mySocketPermissionIntersect)){
          Console.WriteLine("This is expected");
     }
    // mySocketPermissionIntersect should not contain the permissios of mySocketPermission2.
     if (mySocketPermission2.IsSubsetOf(mySocketPermissionIntersect)){
          Console.WriteLine("This should not print");
     }


// Creates a copy of the intersect SocketPermission.
     SocketPermission mySocketPermissionIntersectCopy = 
                               (SocketPermission)mySocketPermissionIntersect.Copy();

     if (mySocketPermissionIntersectCopy.Equals(mySocketPermissionIntersect)){
     Console.WriteLine("Copy successfull");
     }


     // Converts a SocketPermission to XML format and then immediately converts it back to a SocketPermission.
     mySocketPermission1.FromXml(mySocketPermission1.ToXml());

     // Checks to see if permission for this socket resource is unrestricted.  If it is, then there is no need to
     // demand that permissions be enforced.
     if (mySocketPermissionUnion.IsUnrestricted()){
        
          //Do nothing.  There are no restrictions.

     }
     else{
         // Enforces the permissions found in mySocketPermissionUnion on any Socket Resources used below this statement. 
         mySocketPermissionUnion.Demand();
     }

    IPHostEntry myIpHostEntry = Dns.Resolve("www.contoso.com");
    IPEndPoint myLocalEndPoint = new IPEndPoint(myIpHostEntry.AddressList[0], 11000);

       Socket s = new Socket(myLocalEndPoint.Address.AddressFamily,
                                   SocketType.Stream,
                                         ProtocolType.Tcp);
       try{
            s.Connect(myLocalEndPoint);
       }
       catch (Exception e){
            Console.WriteLine("Exception Thrown: " + e.ToString());
       } 

      // Perform all socket operations in here.
      
      s.Close();
   ' Creates a SocketPermission restricting access to and from all URIs.
   Dim mySocketPermission1 As New SocketPermission(PermissionState.None)
   
   ' The socket to which this permission will apply will allow connections from www.contoso.com.
   mySocketPermission1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.contoso.com", 11000)
   
   ' Creates a SocketPermission which will allow the target Socket to connect with www.southridgevideo.com.
   Dim mySocketPermission2 As New SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "www.southridgevideo.com", 11002)
   
   ' Creates a SocketPermission from the union of two SocketPermissions.
   Dim mySocketPermissionUnion As SocketPermission = CType(mySocketPermission1.Union(mySocketPermission2), SocketPermission)
   
   ' Checks to see if the union was successfully created by using the IsSubsetOf method.
   If mySocketPermission1.IsSubsetOf(mySocketPermissionUnion) And mySocketPermission2.IsSubsetOf(mySocketPermissionUnion) Then
      Console.WriteLine("This union contains permissions from both mySocketPermission1 and mySocketPermission2")
      
      ' Prints the allowable accept URIs to the console.
      Console.WriteLine("This union accepts connections on :")
      
      Dim myEnumerator As IEnumerator = mySocketPermissionUnion.AcceptList
      While myEnumerator.MoveNext()
         Console.WriteLine(CType(myEnumerator.Current, EndpointPermission).ToString())
      End While
      
      Console.WriteLine("This union establishes connections on : ")
      
      ' Prints the allowable connect URIs to the console.
      Console.WriteLine("This union permits connections to :")
      
      myEnumerator = mySocketPermissionUnion.ConnectList
      While myEnumerator.MoveNext()
         Console.WriteLine(CType(myEnumerator.Current, EndpointPermission).ToString())
      End While
   End If 
   ' Creates a SocketPermission from the intersect of two SocketPermissions.
   Dim mySocketPermissionIntersect As SocketPermission = CType(mySocketPermission1.Intersect(mySocketPermissionUnion), SocketPermission)
   
   ' mySocketPermissionIntersect should now contain the permissions of mySocketPermission1.
   If mySocketPermission1.IsSubsetOf(mySocketPermissionIntersect) Then
      Console.WriteLine("This is expected")
   End If
   ' mySocketPermissionIntersect should not contain the permissios of mySocketPermission2.
   If mySocketPermission2.IsSubsetOf(mySocketPermissionIntersect) Then
      Console.WriteLine("This should not print")
   End If
   
   ' Creates a copy of the intersect SocketPermission.
   Dim mySocketPermissionIntersectCopy As SocketPermission = CType(mySocketPermissionIntersect.Copy(), SocketPermission)
   
   If mySocketPermissionIntersectCopy.Equals(mySocketPermissionIntersect) Then
      Console.WriteLine("Copy successfull")
   End If
   ' Converts a SocketPermission to XML format and then immediately converts it back to a SocketPermission.
   mySocketPermission1.FromXml(mySocketPermission1.ToXml())
   
   
   ' Checks to see if permission for this socket resource is unrestricted.  If it is, then there is no need to
   ' demand that permissions be enforced.
   If mySocketPermissionUnion.IsUnrestricted() Then
   
   'Do nothing.  There are no restrictions.
   Else
      ' Enforces the permissions found in mySocketPermissionUnion on any Socket Resources used below this statement. 
      mySocketPermissionUnion.Demand()
   End If
   
   Dim myIpHostEntry As IPHostEntry = Dns.Resolve("www.contoso.com")
   Dim myLocalEndPoint As New IPEndPoint(myIpHostEntry.AddressList(0), 11000)
   
   Dim s As New Socket(myLocalEndPoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
   Try
      s.Connect(myLocalEndPoint)
   Catch e As Exception
      Console.WriteLine(("Exception Thrown: " + e.ToString()))
   End Try
   
   ' Perform all socket operations in here.
   s.Close()
End Sub

Uwagi

SocketPermission, aby kontrolować uprawnienia do akceptowania połączeń lub inicjowania połączeń Socket.SocketPermission instances control permission to accept connections or initiate Socket connections. Uprawnienie Socket można ustalić dla nazwy hosta lub adresu IP, numeru portu i protokołu transportowego.A Socket permission can be established for a host name or IP address, a port number, and a transport protocol.

Uwaga

Unikaj tworzenia uprawnień do gniazd przy użyciu nazw hostów, ponieważ te nazwy muszą zostać rozpoznane jako adresy IP i mogą blokować stos.Avoid creating socket permissions using host names, as these names have to be resolved to IP addresses, and this might block the stack.

Konstruktory

SocketPermission(NetworkAccess, TransportType, String, Int32)

Inicjuje nowe wystąpienie klasy SocketPermission dla danego adresu transportu z określonym uprawnieniem.Initializes a new instance of the SocketPermission class for the given transport address with the specified permission.

SocketPermission(PermissionState)

Inicjuje nowe wystąpienie klasy SocketPermission, które umożliwia nieograniczony dostęp do Socket lub nie zezwala na dostęp do Socket.Initializes a new instance of the SocketPermission class that allows unrestricted access to the Socket or disallows access to the Socket.

Pola

AllPorts

Definiuje stałą reprezentującą wszystkie porty.Defines a constant that represents all ports.

Właściwości

AcceptList

Pobiera listę wystąpień EndpointPermission, które identyfikują punkty końcowe, które mogą być akceptowane w ramach tego wystąpienia uprawnień.Gets a list of EndpointPermission instances that identifies the endpoints that can be accepted under this permission instance.

ConnectList

Pobiera listę wystąpień EndpointPermission, które identyfikują punkty końcowe, które mogą być połączone z tym wystąpieniem uprawnienia.Gets a list of EndpointPermission instances that identifies the endpoints that can be connected to under this permission instance.

Metody

AddPermission(NetworkAccess, TransportType, String, Int32)

Dodaje uprawnienie do zestawu uprawnień dla adresu transportowego.Adds a permission to the set of permissions for a transport address.

Assert()

Deklaruje, że kod wywołujący może uzyskać dostęp do zasobu chronionego przez żądanie dostępu za pomocą kodu, który wywołuje tę metodę, nawet jeśli obiekty wywołujące wyższego poziomu stosu nie uzyskały uprawnienia dostępu do zasobu.Declares that the calling code can access the resource protected by a permission demand through the code that calls this method, even if callers higher in the stack have not been granted permission to access the resource. Za pomocą Assert() można tworzyć problemy z zabezpieczeniami.Using Assert() can create security issues.

(Odziedziczone po CodeAccessPermission)
Copy()

Tworzy kopię wystąpienia SocketPermission.Creates a copy of a SocketPermission instance.

Demand()

Wymusza SecurityException w czasie wykonywania, jeśli wszyscy wywołujący znajdujący się wyżej w stosie wywołań nie udzielił uprawnień określonych przez bieżące wystąpienie.Forces a SecurityException at run time if all callers higher in the call stack have not been granted the permission specified by the current instance.

(Odziedziczone po CodeAccessPermission)
Deny()

Zapobiega wywoływaniu obiektów wywołujących w stosie wywołań przy użyciu kodu wywołującego tę metodę w celu uzyskania dostępu do zasobu określonego przez bieżące wystąpienie.Prevents callers higher in the call stack from using the code that calls this method to access the resource specified by the current instance.

(Odziedziczone po CodeAccessPermission)
Equals(Object)

Określa, czy określony obiekt CodeAccessPermission jest równy bieżącemu CodeAccessPermission.Determines whether the specified CodeAccessPermission object is equal to the current CodeAccessPermission.

(Odziedziczone po CodeAccessPermission)
FromXml(SecurityElement)

Rekonstruuje wystąpienie SocketPermission dla kodowania XML.Reconstructs a SocketPermission instance for an XML encoding.

GetHashCode()

Pobiera kod skrótu dla obiektu CodeAccessPermission, który jest odpowiedni do użycia w algorytmach wyznaczania wartości skrótu i struktur danych, takich jak tabela skrótów.Gets a hash code for the CodeAccessPermission object that is suitable for use in hashing algorithms and data structures such as a hash table.

(Odziedziczone po CodeAccessPermission)
GetType()

Pobiera Type bieżącego wystąpienia.Gets the Type of the current instance.

(Odziedziczone po Object)
Intersect(IPermission)

Zwraca logiczną część wspólną między dwoma wystąpieniami SocketPermission.Returns the logical intersection between two SocketPermission instances.

IsSubsetOf(IPermission)

Określa, czy bieżące uprawnienie jest podzbiorem określonego uprawnienia.Determines if the current permission is a subset of the specified permission.

IsUnrestricted()

Sprawdza ogólny stan uprawnień obiektu.Checks the overall permission state of the object.

MemberwiseClone()

Tworzy skróconą kopię bieżącego Object.Creates a shallow copy of the current Object.

(Odziedziczone po Object)
PermitOnly()

Zapobiega wywoływaniu obiektów wywołujących w stosie wywołań przy użyciu kodu wywołującego tę metodę w celu uzyskania dostępu do wszystkich zasobów z wyjątkiem zasobu określonego przez bieżące wystąpienie.Prevents callers higher in the call stack from using the code that calls this method to access all resources except for the resource specified by the current instance.

(Odziedziczone po CodeAccessPermission)
ToString()

Tworzy i zwraca reprezentację ciągu dla bieżącego obiektu uprawnienia.Creates and returns a string representation of the current permission object.

(Odziedziczone po CodeAccessPermission)
ToXml()

Tworzy Kodowanie XML wystąpienia SocketPermission i jego bieżącego stanu.Creates an XML encoding of a SocketPermission instance and its current state.

Union(IPermission)

Zwraca Unię logiczną między dwoma wystąpieniami SocketPermission.Returns the logical union between two SocketPermission instances.

Jawne implementacje interfejsu

IPermission.Demand() (Odziedziczone po CodeAccessPermission)
IStackWalk.Assert() (Odziedziczone po CodeAccessPermission)
IStackWalk.Demand() (Odziedziczone po CodeAccessPermission)
IStackWalk.Deny() (Odziedziczone po CodeAccessPermission)
IStackWalk.PermitOnly() (Odziedziczone po CodeAccessPermission)

Dotyczy