/// <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(); } }
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); }
/// <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); }