Member 12569958 Ответов: 1

Как получить доступные открытые порты для конкретного ip?


когда я даю ip-адрес клиента, я должен знать доступные открытые порты клиента. например, когда мы даем ip-адрес клиента, он будет сканировать доступные порты клиента.

Что я уже пробовал:

использование системы;
использование системы.Коллекции.Общий;
использование System. Linq;
используя системы.Текст;

используя системы.Нет.Розетки;
использование системы.Нарезание резьбы;
использование System.Net;

пространство имен SimplePortScan
{
PortScanner открытый класс
{
частный IP-адрес _target;
public int Port { get; private set; }
public bool IsOpen { get; private set; }

общественные PortScanner(целевой IP-адрес, порт инт )
{
_target = цель;
Порт = Порт;
}

public void ScanPort()
{
используя (объект TcpClient объект TcpClient = новый объект TcpClient())
{
пробовать
{
объект TcpClient.Connect (_target, порт);
}
поймать (исключения socketexception)
{
Isopen значение = ложь;
}

если (isopen значение)
{
использование (NetworkStream ClientStream = TcpClient.Метод getstream())
{
Isopen значение = ИСТИНА;
}
}
}
}
}
}

Richard MacCutchan

Есть ли там где-то вопрос?

Sergey Alexandrovich Kryukov

Главная проблема, которую я вижу: вы никогда не отключаете клиента.
—СА

[no name]

Проще использовать NMAP и анализировать возвращаемое значение...

Philippe Mori

Вы, должно быть, очень ленивы, чтобы не форматировать свой код... Мы также будем ленивы, чтобы ответить вам.

1 Ответов

Рейтинг:
1

Member 12599256

using System;
using System.Net.Sockets;
using System.Threading.Tasks;

namespace TestApps
{
  internal class Program
  {
    private static void Main(string[] args)
    {
      const string ipAddress = "192.168.1.2";
      const int fromPort = 1;
      const int toPort = 50;
      Parallel.For(fromPort, toPort, port =>
      {
        var isPortOpen = IsPortOpen(ipAddress, port);
        Console.WriteLine(isPortOpen ? "{0} : open" : "{0} : close", port);
      });
    }

    private static bool IsPortOpen(string ipAddress, int port)
    {
      var tcpClient = new TcpClient();
      try
      {
        var result = tcpClient.BeginConnect(ipAddress, port, null, null);
        var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1));
        tcpClient.EndConnect(result);
        tcpClient.Close();
        return success;
      }
      catch
      {
        return false;
      }
    }
  }
}