Проверка открытых/закрытых портов - C#
Формулировка задачи:
Написал тестовую программe которая посматривает определенный порт, а потом выводи соответствующее сообщение.
Но, она работает не корректно:
- не могу понять почему не когда не вызывается else, сразу выпадает исключение, если порт закрыт.
- если закрыть 80 порт, то всегда выпадает исключение на все порты, хоть они и не были закрыты в ручную
Если есть предложения как исправить эти ошибки, то пишите!)
Вот код:
using System;
using System.Net;
using System.Net.Sockets;
namespace test___1
{
class Program
{
static void Main()
{
string hostName = "mail.yandex.ru";
int port = 1295;
try
{
HttpWebRequest reqFP = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
HttpWebResponse rspFP = (HttpWebResponse)reqFP.GetResponse();
if (HttpStatusCode.OK == rspFP.StatusCode)
{
IPAddress[] IPa = Dns.GetHostAddresses(hostName);
Socket checkerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
checkerSocket.Connect(IPa[0], port);
if (checkerSocket.Connected == true)
{
checkerSocket.Close();
Console.WriteLine("Port " + port + " open");
}
else
{
checkerSocket.Close();
Console.WriteLine("Port " + port + " closed");
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
catch (WebException e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
}
}
неужели некто не знает?!
Решение задачи: «Проверка открытых/закрытых портов»
textual
Листинг программы
protected string GetCheckOpenPorts(int portNumber)
{
bool ipAvailable = true;
IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpListeners();
foreach (IPEndPoint andPoint in tcpConnInfoArray)
{
if (andPoint.Port == portNumber)
{
ipAvailable = false;
break;
}
}
if (ipAvailable == false)
{
return PortOpen();
}
else
{
return PortCloseOrEstablished();
}
}
protected string PortOpen()
{
return "Port " + portNumber + " open for incoming connection(LISTENING)";
}
protected string PortCloseOrEstablished()
{
return "Port " + portNumber + " busy or closed";
}
}