Как узнать какие порты открыты на моем девайсе, программным методом C#
Способы проверки портов попытками коннекта могут быть ненадежными или занимать слишком много времени, особенно при проверке нескольких портов. К тому же, приложения могут слушать только определенные ip-адреса, и не слушать при этом 127.0.0.1, что приведет к негативному результату при попытке подключения.
В C# есть стандартный способ получения списка активных TCP Listners:
System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()
.GetActiveTcpListeners();
Работает достаточно быстро, результат можно отфильтровать по нужному порту / ip.
var isPortBusy = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()
.GetActiveTcpListeners().Any(l => l.Port == 80);
Как вариант прозвонить в диапазоне от IPEndPoint.MinPort до IPEndPoint.MaxPort. По идее, это займет очень много времени...
Функция проверки открыт ли порт:
public bool CheckIfPortIsOpen(int port)
{
try
{
using (var tcpClient = new TcpClient())
{
tcpClient.Connect("127.0.0.1", port);
return true;
}
}
catch (SocketException)
{
return false;
}
}
Советую обернуть метод в таску, ибо он может быть продолжительным.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей