Попробуй так:
private static List<IPAddress> IPAddressesRange(IPAddress firstIPAddress, IPAddress lastIPAddress)
{
var firstIPAddressAsBytesArray = firstIPAddress.GetAddressBytes();
var lastIPAddressAsBytesArray = lastIPAddress.GetAddressBytes();
Array.Reverse(firstIPAddressAsBytesArray);
Array.Reverse(lastIPAddressAsBytesArray);
var firstIPAddressAsInt = BitConverter.ToInt32(firstIPAddressAsBytesArray, 0);
var lastIPAddressAsInt = BitConverter.ToInt32(lastIPAddressAsBytesArray, 0);
var ipAddressesInTheRange = new List<IPAddress>();
for (var i = firstIPAddressAsInt; i <= lastIPAddressAsInt; i++)
{
var bytes = BitConverter.GetBytes(i);
var newIp = new IPAddress(new[] {bytes[3], bytes[2], bytes[1], bytes[0]});
ipAddressesInTheRange.Add(newIp);
}
return ipAddressesInTheRange;
}
Преобразовать текстовую строку в IPAddress (чтобы подать на вход вышеприведённой функции) можно так:
var ipAddres = System.Net.IPAddress.Parse(ipString);
(подразумевается, что переменная ipString имеет тип string и содержит IP адрес в текстовой нотации).
Пример использования (при нажатии на кнопку button1 считаем диапазон от 192.168.0.1 до 192.168.0.10 и выкладываем в заголовок формы второй адрес из полученного диапазона):
private void button1_Click(object sender, EventArgs e)
{
var first = "192.168.0.1";
var last = "192.168.0.10";
var range = IPAddressesRange(IPAddress.Parse(first), IPAddress.Parse(last));
Text = range[1].ToString();
}
Консольные проги на C# никогда не писал (как-то так исторически сложилось, под консоль писал на других языках) так что вопрос ввода данных предлагаю отладить Вам самому, а что делать далее когда Вы получили первый и последний IP в строковом формате надеюсь понятно их последнего примера (если нет - дайте знать).
UPDATE: Т.к. вопрошающему, судя по комментам, не помогло, добавляю полный код рабочей WinForms-программы:
using System;
using System.Collections.Generic;
using System.Net;
using System.Windows.Forms;
namespace IpRange
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void goButton_Click(object sender, EventArgs e)
{
IPAddress firstIpAddress;
IPAddress lastIpAddress;
if (String.IsNullOrWhiteSpace(firstIpAddressTextBox.Text))
{
MessageBox.Show("Не задан начальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (String.IsNullOrWhiteSpace(lastIpAddressTextBox.Text))
{
MessageBox.Show("Не задан начальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
firstIpAddress = IPAddress.Parse(firstIpAddressTextBox.Text);
}
catch (FormatException)
{
MessageBox.Show("Неправильно задан финальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
lastIpAddress = IPAddress.Parse(lastIpAddressTextBox.Text);
}
catch (FormatException)
{
MessageBox.Show("Неправильно задан финальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
var range = IPAddressesRange(firstIpAddress, lastIpAddress);
wholeRangeListBox.Items.Clear();
wholeRangeListBox.Items.AddRange(range.ToArray());
// Или так (*вместо* предыдущей строчки - ту убрать, эту разкомментировать):
// foreach (var ipAddress in range) wholeRangeListBox.Items.Add(ipAddress);
}
private static List<IPAddress> IPAddressesRange(IPAddress firstIPAddress, IPAddress lastIPAddress)
{
var firstIPAddressAsBytesArray = firstIPAddress.GetAddressBytes();
var lastIPAddressAsBytesArray = lastIPAddress.GetAddressBytes();
Array.Reverse(firstIPAddressAsBytesArray);
Array.Reverse(lastIPAddressAsBytesArray);
var firstIPAddressAsInt = BitConverter.ToInt32(firstIPAddressAsBytesArray, 0);
var lastIPAddressAsInt = BitConverter.ToInt32(lastIPAddressAsBytesArray, 0);
var ipAddressesInTheRange = new List<IPAddress>();
for (var i = firstIPAddressAsInt; i <= lastIPAddressAsInt; i++)
{
var bytes = BitConverter.GetBytes(i);
var newIp = new IPAddress(new[] {bytes[3], bytes[2], bytes[1], bytes[0]});
ipAddressesInTheRange.Add(newIp);
}
return ipAddressesInTheRange;
}
}
}
Обратите внимание, что програма "окультурена", что выражается не только в проверке входных значений на пустоту и обработке неожиданного ввода исключениями, но и использованием информативных имён для элементов: главную форму я по обыкновению переименовываю из Form1 в MainForm, кнопка переименована из button1 в goButton, текстовые поля для ввода - firstIpAddressTextBox и lastIpAddressTextBox, список для вывода - wholeRangeListBox - надеюсь это не доставит дополнительных трудностей с использованием этого кода.