コード例 #1
0
        /// <summary>
        /// Starts port listeners and sends a request to the PortMapSleuth server for testing.
        /// </summary>
        /// <param name="ipProtocol"></param>
        /// <param name="ports"></param>
        /// <returns>Returns successful if all ports succeeded.</returns>
        public void TestPorts(IPProtocol ipProtocol, List <int> ports)
        {
            var portMapRequest = new PortTestRequest {
                Ports      = ports,
                IPProtocol = ipProtocol
            };
            string portMapRequestJSON = JsonConvert.SerializeObject(portMapRequest);

            UdpClientListeners = new List <UdpClient>();

            try {
                // Create the udp listeners:
                foreach (var port in ports)
                {
                    UdpClientListeners.Add(StartUDPListener(port));
                }

                // Send out the port test request:
                StartWebRequest(portMapRequestJSON);
            } catch (Exception e) {
                // Error codes: http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
                Console.WriteLine(e.ToString());

                PortTestException();
            }
        }
コード例 #2
0
        public object Post(PortTestRequest portTest)
        {
            Console.WriteLine("------------------------------------");
            Console.WriteLine("Got port test request from:");
            Console.WriteLine("IP: " + Request.RemoteIp);
            Console.WriteLine("IP Protocol: " + portTest.IPProtocol);
            Console.WriteLine("Ports: ");
            foreach (var port in portTest.Ports)
            {
                Console.WriteLine(port);
            }

            var result = TestUDPPorts(portTest);

            Console.WriteLine("Test result: " + result.Headers["PortTestResult"]);

            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Tests all the ports as requested, TCP or UDP.
        /// </summary>
        /// <param name="portTestRequest"></param>
        /// <returns></returns>
        private HttpResult TestUDPPorts(PortTestRequest portTestRequest)
        {
            List <bool> results = new List <bool>();

            // Test all ports requested
            foreach (int port in portTestRequest.Ports)
            {
                bool testResult;
                if (portTestRequest.IPProtocol == IPProtocol.UDP)
                {
                    testResult = TestUDPPort(Request.RemoteIp, port);
                }
                else
                {
                    testResult = TestTCPPort(Request.RemoteIp, port);
                }

                results.Add(testResult);
            }

            var httpResult = new HttpResult(HttpStatusCode.OK);

            if (results.Contains(false) && results.Contains(true))
            {
                httpResult.Headers.Add("PortTestResult", PortTestResult.PartialSuccess.ToString());
            }
            else if (results.Contains(true))
            {
                httpResult.Headers.Add("PortTestResult", PortTestResult.FullSuccess.ToString());
            }
            else
            {
                httpResult.Headers.Add("PortTestResult", PortTestResult.Fail.ToString());
            }

            return(httpResult);
        }