Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Диапазон IP-адрессов 
:(
    Опции темы
vood
Дата 1.6.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 23.2.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Проблема такая: нужно перебрать диапозон адресов скажем от 100.0.0.0 до 120.23.45.68 
Может кто нибудь знает как это сделать? smile  


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Matematik
Дата 1.6.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Переведи в тип Cardinal и прибавляй 1
Что-то типа такого
Код


Function IpToLong(ip:string):LongInt;
 var
  x,i:byte;
  ipx:array[0..3] of byte;
  v:integer;
 begin
  Result:=0;
  longint(ipx):=0; i:=3;
  for x:=1 to length(ip) do
   if ip[x]='.' then begin
    Dec(i);
    if i=255 then exit;
   end else begin
    if not (ip[x] in ['0'..'9']) then exit;
    v:=ipx[i]*10+ord(ip[x])-ord('0');
    if v>255 then exit;
    ipx[i]:=v;
   end;
  result:=longint(ipx);
 end;

Function LongToIp(Long:LongInt):string;
 var
  ipx:array[0..3] of byte;
  i:byte;
 begin
  longint(ipx):=long;
  Result:='';
  for i:=3 downto 0 do result:=result+IntToStr(ipx[i])+'.';
  SetLength(Result,Length(Result)-1);
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  edit2.Text := inttostr(IpToLong(edit1.text))
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   edit1.Text := LongToIp(Strtoint(edit2.text))
end;
 

Это сообщение отредактировал(а) Matematik - 1.6.2006, 14:11
PM MAIL WWW ICQ   Вверх
vood
Дата 2.6.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 23.2.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



то есть с этими функциями можно пройти диапазон циклом?? 


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Matematik
Дата 2.6.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Вот
Код

procedure TForm1.Button1Click(Sender: TObject);
var j,i1,i2:Integer;
begin
  i1 := IpToLong(edit1.text);
  i2 := IpToLong(edit2.text);
  memo1.Lines.BeginUpdate;
  for j:=i1 to i2 do
  begin
    memo1.Lines.Add(LongToIp(j));
  end;
  memo1.Lines.EndUpdate;
end;
 
PM MAIL WWW ICQ   Вверх
vood
Дата 3.6.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 23.2.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Спасибо! 


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Демо
Дата 4.6.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



Почему бы стандартными функциями для работы с ip-адресом не воспользоваться?

Код

type

  SunB = packed record
    s_b1, s_b2, s_b3, s_b4: Char;
  end;

  SunW = packed record
    s_w1, s_w2: word;
  end;

  TInAddr = record
    case integer of
      0: (S_un_b: SunB);
      1: (S_un_w: SunW);
      2: (S_addr: LongInt);
  end;

  function inet_addr(cp: PChar): LongInt; stdcall; external 'wsock32.dll' name 'inet_addr';
  function inet_ntoa(inaddr: TInAddr): PChar; stdcall; external 'wsock32.dll' name 'inet_ntoa';
  function htonl(hostlong: LongInt): LongInt; stdcall; external 'wsock32.dll' name 'htonl';
  function ntohl(netlong: LongInt): LongInt; stdcall; external 'wsock32.dll' name 'ntohl';

function IP2D(ip: String): LongInt;
begin
    Result := inet_addr(PChar(ip));
end;

function D2IP(ip: LongInt):String;
var
    p: PChar;
    d: TInAddr;
begin
  d.S_addr := ip;
  p := inet_ntoa(d);
  Result := p;
end;

function IncIp(ip: String; IncValue: Integer=1):String;
var
    d: TInAddr;
begin
  d.S_addr := ntohl(htonl(IP2D(ip))+IncValue);
  Result := String(inet_ntoa(d));
end;

function DecIp(ip: String; DecValue: Integer=1):String;
var
    d: TInAddr;
begin
  d.S_addr := ntohl(htonl(IP2D(ip))-DecValue);
  Result := String(inet_ntoa(d));
end;

  

Это сообщение отредактировал(а) Демо - 4.6.2006, 11:42


--------------------
    
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.