public void GetReady () { s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "localhost", 8080); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "123", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "www.ximian.com", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "120.4.3.2", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.google.com", 80); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "1.*.10.*.99", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", SocketPermission.AllPorts); //s1.AddPermission(NetworkAccess.Accept, TransportType.All, "0.0.0.0", SocketPermission.AllPorts); s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "localhost", 8080); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "123", 8080); //s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "www.google.com", SocketPermission.AllPorts); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "213.*.*.*", SocketPermission.AllPorts); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", 9090); s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "216.239.*.*", SocketPermission.AllPorts); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "128.0.0.1", SocketPermission.AllPorts); //s2.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "120.4.3.2", 80); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "196.*.*.*", SocketPermission.AllPorts); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "1.*.*.*.99", SocketPermission.AllPorts); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090); //s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.7", SocketPermission.AllPorts); }
public void IsSubsetOf () { s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090); Assertion.Assert ("#1", !s1.IsSubsetOf (s2)); Assertion.Assert ("#2", !s2.IsSubsetOf (s1)); s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", 9090); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090); Assertion.Assert ("#4", !s2.IsSubsetOf (s1)); s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.*.*", 80); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.*", 80); Assertion.Assert ("#5", s1.IsSubsetOf (s2)); Assertion.Assert ("#6", !s2.IsSubsetOf (s1)); s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "10.11.*.*", 9090); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts); Assertion.Assert ("#7", s1.IsSubsetOf (s2)); Assertion.Assert ("#8", !s2.IsSubsetOf (s1)); }
public void IsSubsetOf () { s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090); Assert.IsFalse (s1.IsSubsetOf (s2), "#1"); Assert.IsFalse (s2.IsSubsetOf (s1), "#2"); s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", 9090); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090); Assert.IsFalse (s2.IsSubsetOf (s1), "#4"); s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.*.*", 80); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.*", 80); Assert.IsTrue (s1.IsSubsetOf (s2), "#5"); Assert.IsFalse (s2.IsSubsetOf (s1), "#6"); s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s1.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "10.11.*.*", 9090); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", SocketPermission.AllPorts); Assert.IsTrue (s1.IsSubsetOf (s2), "#7"); Assert.IsFalse (s2.IsSubsetOf (s1), "#8"); }
public void IsSubsetOf2 () { s1 = new SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "12.13.14.15", 80); s1.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.4.*", 9090); s2 = new SocketPermission(NetworkAccess.Connect, TransportType.All, "12.13.14.15", 80); s2.AddPermission(NetworkAccess.Accept, TransportType.All, "10.11.*.*", 9090); Assertion.Assert ("#3: bug in MS.Net", s1.IsSubsetOf (s2)); }
private void ParseAddPermissions(SocketPermission perm) { NetworkAccess access; if (0 == string.Compare(m_access, strConnect, StringComparison.OrdinalIgnoreCase )) { access = NetworkAccess.Connect; } else if (0 == string.Compare(m_access, strAccept, StringComparison.OrdinalIgnoreCase )) { access = NetworkAccess.Accept; } else { throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strAccess, m_access)); } TransportType transport; try { transport = (TransportType) Enum.Parse(typeof(TransportType), m_transport, true); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strTransport, m_transport), e); } int port; if (string.Compare(m_port, "All", StringComparison.OrdinalIgnoreCase ) == 0) { m_port = "-1"; } try { port = Int32.Parse(m_port, NumberFormatInfo.InvariantInfo); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strPort, m_port), e); } if (!ValidationHelper.ValidateTcpPort(port) && port != SocketPermission.AllPorts) { throw new ArgumentOutOfRangeException("port", port, SR.GetString(SR.net_perm_invalid_val, strPort, m_port)); } perm.AddPermission(access, transport, m_host, port); }
// Methods public override IPermission CreatePermission () { if (this.Unrestricted) return new SocketPermission (PermissionState.Unrestricted); string missing = String.Empty; if (m_access == null) missing += "Access, "; if (m_host == null) missing += "Host, "; if (m_port == null) missing += "Port, "; if (m_transport == null) missing += "Transport, "; if (missing.Length > 0) { string msg = Locale.GetText ("The value(s) for {0} must be specified."); missing = missing.Substring (0, missing.Length - 2); // remove last separator throw new ArgumentException (String.Format (msg, missing)); } NetworkAccess access; TransportType transport; int port = SocketPermission.AllPorts; if (String.Compare (m_access, "Connect", true) == 0) access = NetworkAccess.Connect; else if (String.Compare (m_access, "Accept", true) == 0) access = NetworkAccess.Accept; else { string msg = Locale.GetText ("The parameter value for 'Access', '{1}, is invalid."); throw new ArgumentException (String.Format (msg, m_access)); } if (String.Compare (m_port, "All", true) != 0) { try { port = Int32.Parse (m_port); } catch { string msg = Locale.GetText ("The parameter value for 'Port', '{1}, is invalid."); throw new ArgumentException (String.Format (msg, m_port)); } // test whether port number is valid.. new IPEndPoint (1, port); } try { transport = (TransportType) Enum.Parse (typeof (TransportType), m_transport, true); } catch { string msg = Locale.GetText ("The parameter value for 'Transport', '{1}, is invalid."); throw new ArgumentException (String.Format (msg, m_transport)); } SocketPermission perm = new SocketPermission (PermissionState.None); perm.AddPermission (access, transport, m_host, port); return perm; }
private void ParseAddPermissions(SocketPermission perm) { NetworkAccess access; if (0 == string.Compare(m_access, strConnect, true, CultureInfo.InvariantCulture)) { access = NetworkAccess.Connect; } else if (0 == string.Compare(m_access, strAccept, true, CultureInfo.InvariantCulture)) { access = NetworkAccess.Accept; } else { throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strAccess, m_access)); } TransportType transport; try { transport = (TransportType) Enum.Parse(typeof(TransportType), m_transport, true); } catch (Exception e) { throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strTransport, m_transport), e); } int port; if (string.Compare(m_port, "All", true, CultureInfo.InvariantCulture) == 0) { m_port = "-1"; } try { port = Int32.Parse(m_port); } catch (Exception e) { throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strPort, m_port), e); } if (!ValidationHelper.ValidateTcpPort(port) && port != SocketPermission.AllPorts) { throw new ArgumentOutOfRangeException(SR.GetString(SR.net_perm_invalid_val, strPort, m_port)); } perm.AddPermission(access, transport, m_host, port); }
/// <summary> /// Starts run loop for proxy. Loop will run until a connection is made /// and the disconnected. /// /// It will only allow a single connection from the local machine. Once that /// connection is dropped or closed, the run loop will return and exit. /// </summary> public void Run() { //initialize buffer. We use 1024, as otherwise messages where being split up which //made them difficult to work with //todo: fix this so buffer size doesnt matter buffer = new byte[1024]; //create a SocketPermission instance to set permissions on socket. No permissions by default SocketPermission sPermission = new SocketPermission(PermissionState.None); //allow connections ONLY from localhost, via TCP, and the specified port sPermission.AddPermission(NetworkAccess.Accept, TransportType.Tcp, "127.0.0.1", port); //bind to the local address IPAddress localAddr = IPAddress.Parse("127.0.0.1"); //create a tcpListener on the local address and specified port to listen //for incoming connections TcpListener tcpListener = new TcpListener(localAddr, port); //start listening tcpListener.Start(); //wait for first connection. The method blocks until a connection is //received client = tcpListener.AcceptSocket(); //create a network stream to communicate with the client stream = new NetworkStream(client); //set the read call back for when data comes in on stream readCallback = new AsyncCallback(this.onStreamRead); //set the write call back for when data is written to stream writeCallback = new AsyncCallback(this.onStreamWrite); //make sure client is connected if(client.Connected) { //start listening on the socket Listen(); //start infinite loop. We do this so we can check for connection //and exit the run loop if the connection is dropped for(;;) { //make sure we are still connected to the client if(client == null || !client.Connected) { //if not, exit run loop return; } //sleep for 100 milliseconds. We do this so the loop doesnt //run as fast as possible and eat up CPU unecessarily Thread.Sleep(100); } } }