Сканер портов. Неправильный формат IP-адреса - C#

Узнай цену своей работы

Формулировка задачи:

Пишу я сканер портов, нашла в инете кучу копий одного и того же кода для windows form application... Хочу сканер асинхронный, и нужно консольный. Попробовала подогнать код, но что то пошло не так.. В 50-й строке выдает эксепшн - мол, не тот формат адреса. погуглила. если не ошибаюсь, в этом месте метод вместо

hostName

ждет строку вида

"176.15.146.56"

. пыталась много чего туда запихнуть, например, pingReply.Address и кучу вариаций... не выходит. подскажите, в чем косяк?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;

namespace NmapSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (string hostName in args)
                Scan(hostName);
        }
 
        public static void Scan(string hostName) {
            Console.WriteLine(String.Format("Название хоста: {0}", hostName));
            IPHostEntry myHost = Dns.GetHostEntry(hostName);
            Ping ping = new Ping();
            PingReply pingReply = ping.Send(hostName);
 
            try
            {
                Console.WriteLine("Время ответа: {0}", pingReply.RoundtripTime);
                Console.WriteLine("Cтатус: {0}", pingReply.Status);
                Console.WriteLine("IP: {0}", pingReply.Address);
 
                Console.WriteLine();
 
            }
            catch (PingException e)
            {
                Console.WriteLine(e.Message);
            }
 
            Console.WriteLine("Enter start port");
            int startPort = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Enter end port");
            int endPort = Convert.ToInt32(Console.ReadLine());
 
            IPAddress ipAddr = IPAddress.Parse(hostName);
            for (int i = startPort; i <= endPort; i++)
            {
                //Создаем сокет
                IPEndPoint ipEndP = new IPEndPoint(ipAddr, i);
                Socket mySoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
                //Пробуем подключится к указанному хосту
                IAsyncResult asyncResult = mySoc.BeginConnect(ipEndP, new AsyncCallback(ConnectCallback), mySoc);

                if (!asyncResult.AsyncWaitHandle.WaitOne(30, false))
                {
                    mySoc.Close();
                    Console.WriteLine("Порт {0} закрыт", i.ToString());
                }
                else
                {
                    mySoc.Close();
                    Console.WriteLine("Порт {0} открыт", i.ToString());
                }
            }
        }
 
        private static void ConnectCallback(IAsyncResult ar)
        {
            try
            {
                Socket client = (Socket)ar.AsyncState;
                client.EndConnect(ar);
                //connectDone.Set();
            }
            catch (Exception e)
            {
            }
        }
    }
}

Решение задачи: «Сканер портов. Неправильный формат IP-адреса»

textual
Листинг программы
string host1 = Convert.ToString(pingReply.Address);
IPAddress ipAddr = IPAddress.Parse(host1);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы