Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2018, 09:40   #1
Alex711
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 99
По умолчанию Подскажите пожалуйста как лучше реализовать проверку условия попадания введённого IP адреса в заданный диапазон

Подскажите пожалуйста как лучше реализовать условие:
в edit1 IP-адрес
если этот ip и диапазона 192.168.1.1-192.168.1.255 тогда в label1 значение ххх
если этот ip и диапазона 192.168.0.1-192.168.0.255 тогда в label1 значение yyy
Alex711 вне форума Ответить с цитированием
Старый 09.10.2018, 10:24   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

IP - это всего просто представление 32-разрядного целого числа. (гугл delphi IP to integer или IP преобразовать в Integer)
поэтому попробуйте преобразовать все IP (проверяемый адрес и адреса диапазонов) в числа и сравните.

p.s. если это решение не понравится/не устроит - попробуйте взять готовый код со стековерфлоу (хотя мне такой подход не очень понравился).

Последний раз редактировалось Serge_Bliznykov; 09.10.2018 в 10:30.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2018, 15:57   #3
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

http://www.programmersforum.ru/showt...=322576&page=3

Код:
type
  TIPRange=record
  private
    StartIP,StopIP,CurrentIP:cardinal;
    function IP2Cardinal(const IP:string):cardinal;
  public
    constructor Create(const Start,Stop:string);
    function IsIn(const IP:string):boolean;
    function GetNext(out Str:string):boolean;
  end;

{ TIPRange }

constructor TIPRange.Create(const Start, Stop: string);
begin
  StartIP:=IP2Cardinal(Start);
  StopIP:=IP2Cardinal(Stop);
  CurrentIP:=StartIP;
end;

function TIPRange.IP2Cardinal(const IP: string): cardinal;
var
  IPRec:LongRec;
  Parts:TArray<string>;
begin
  Parts:=IP.Split(['.']);
  IPRec.Bytes[3]:=StrToInt(Parts[0]);
  IPRec.Bytes[2]:=StrToInt(Parts[1]);
  IPRec.Bytes[1]:=StrToInt(Parts[2]);
  IPRec.Bytes[0]:=StrToInt(Parts[3]);
  result:=cardinal(IPRec);
end;

function TIPRange.IsIn(const IP:string):boolean;
var C:cardinal;
begin
  C:=IP2Cardinal(IP);
  result:=(C>=StartIP) and (C<=StopIP);
end;

function TIPRange.GetNext(out Str: string): boolean;
var IP:cardinal;
begin
  IP:=cardinal(TInterlocked.Increment(integer(CurrentIP)));
  result:=(IP<=StopIp);
  if result then
    Str:=IntToStr(LongRec(IP).Bytes[3])+'.'+IntToStr(LongRec(IP).Bytes[2])+'.'+
       IntToStr(LongRec(IP).Bytes[1])+'.'+IntToStr(LongRec(IP).Bytes[0])
  else
    Str:='';
end;
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 09.10.2018 в 16:06.
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, пожалуйста, как реализовать картинку на разных фонах. Persey15 Помощь студентам 0 06.11.2017 20:20
Подскажите пожалуйста как лучше и правильнее реализовать хранение и обработку tName Общие вопросы по программированию, компьютерный форум 1 20.10.2017 09:51
нужно реализовать проверку условия Айдар94941228 Общие вопросы Delphi 1 25.03.2013 01:22
Подскажите пожалуйста как сделать такую проверку орфографии Irinka87 Microsoft Office Word 1 10.12.2009 09:19
Подскажите пожалуйста, Как реализовать нумерацию. Условие внутри. vladtr Microsoft Office Excel 2 10.06.2009 15:36