Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Сравнение двух IP-адресов   Найти похожие ветки 

 
Артем К.   (2004-10-08 05:02) [0]

Здравствуйте, уважаемые мастера!

Как сравнить две строки, в которых находятся IP-адреса, т.е. нужно узнать какой IP-адрес больше.

Заранее спасибо!


 
Gero ©   (2004-10-08 05:10) [1]

<, >


 
Артем К.   (2004-10-08 05:17) [2]

Понятно, что при помощи < и >

Например есть некоторые абстрактные адреса:
1.000.000.000 и 000.000.000.1

Как можно эти адреса сравнить, т.е. определить, что
1.000.000.000 > 000.000.000.1


 
Verg ©   (2004-10-08 05:22) [3]

Если речь идет об IPv4, то

ntohl(inet_addr(pchar(IPString1)))  <операция сравнения> ntohl(inet_addr(pchar(IPString2)))


 
SammIk ©   (2004-10-08 05:22) [4]

Переводишь в тип DWORD и сравниваешь
Ищи в мсдн, есть такая ф-я. Или сам напиши.


 
SammIk ©   (2004-10-08 05:23) [5]

Вот все надо разжувать!))


 
Артем К.   (2004-10-08 05:29) [6]

>>SammIk

если бы я сам мог это сделать, то не спрашивал бы. для того форумы и существуют :))


 
Verg ©   (2004-10-08 05:33) [7]

Учти, однако, что если часть(и) IP адреса заданы с лидирующим нулем, то считается, что они заданы в восьмиричной СС.
Так работает inet_addr


 
Klopan ©   (2004-10-08 20:24) [8]

вот функция преобразующая ip в hex


function IP2HEX(OrgIP:string):string;
var
 // Сохраняем оригинальное значение IP адреса
 OrgVal: string;
 // части оригинального IP
 O1,O2,O3,O4: string;
 // шестнадцатиричные части
 H1,H2,H3,H4: string;
 // Здесь будут собраны все шестнадцатиричные части
 HexIP: string;
 XN: array[1..8] of Extended;
 Flt1: Extended;
 Xc: Integer;
begin

 // Сохраняем в обратном порядке для простого случая
 Xn[8]:=IntPower(16,0);Xn[7]:=IntPower(16,1); Xn[6]:=IntPower(16,2);Xn[5]:=IntPower(16,3);
 Xn[4]:=IntPower(16,4);Xn[3]:=IntPower(16,5); Xn[2]:=IntPower(16,6);Xn[1]:=IntPower(16,7);

 // Сохраняем оригинальный IP адрес
 OrgVal:=OrgIP;
 O1:=Copy(OrgVal,1,Pos(".",OrgVal)-1);Delete(OrgVal,1,Pos(".",OrgVal));
 O2:=Copy(OrgVal,1,Pos(".",OrgVal)-1);Delete(OrgVal,1,Pos(".",OrgVal));
 O3:=Copy(OrgVal,1,Pos(".",OrgVal)-1);Delete(OrgVal,1,Pos(".",OrgVal));
 O4:=OrgVal;

 H1:=IntToHex(StrToInt(O1),2);H2:=IntToHex(StrToInt(O2),2);
 H3:=IntToHex(StrToInt(O3),2);H4:=IntToHex(StrToInt(O4),2);

 // Получаем шестнадцатиричное значение IP адреса
 HexIP:=H1+H2+H3+H4;

 // Преобразуем это большое шестнадцатиричное значение в переменную Float
 Flt1:=0;

 for Xc:=1 to 8 do
 begin
   case HexIP[Xc] of
     "0".."9": Flt1:=Flt1+(StrToInt(HexIP[XC])*Xn[Xc]);
     "A": Flt1:=Flt1+(10*Xn[Xc]);
     "B": Flt1:=Flt1+(11*Xn[Xc]);
     "C": Flt1:=Flt1+(12*Xn[Xc]);
     "D": Flt1:=Flt1+(13*Xn[Xc]);
     "E": Flt1:=Flt1+(14*Xn[Xc]);
     "F": Flt1:=Flt1+(15*Xn[Xc]);
   end;
 end;
 Result:=FloatToStr(Flt1);
end;


 
Defunct ©   (2004-10-08 20:35) [9]

Вот функции, которые помогут в этом отношении.

   This file is part of the Free Sockets Interface
   Copyright (c) 1999 by Berczi Gabor ( e-mail: sting@freemail.hu )


type
   TIPRec = packed record
     Octets: array[1..4] of byte;
   end;

Function FormatIP(IP: Cardinal): string;
Var S: string[20];
   I: Cardinal;
Begin
 S:="";
 For I:=1 to 4 Do
 Begin
   If I<>1 Then S:=S+".";
   S:=S+Int2String(TIPRec(IP).Octets[I]);
 End;
 FormatIP:=S;
End;

Procedure SplitIP(IP: Cardinal; var B1,B2,B3,B4: byte);
Begin
 With TIPRec(IP) Do
 Begin
   B1:=Octets[1];
   B2:=Octets[2];
   B3:=Octets[3];
   B4:=Octets[4];
 End;
End;

Function IP(B1,B2,B3,B4: byte): Cardinal;
Var L: Cardinal;
Begin
 With TIPRec(L) do
 Begin
   Octets[1]:=B1;
   Octets[2]:=B2;
   Octets[3]:=B3;
   Octets[4]:=B4;
 End;
 IP:=L;
End;

Function IPStr(IP: string): Cardinal;
Var Addr: TIPRec;
   I,P: Cardinal;
Begin
 For I:=1 To 4 Do
 Begin
   P:=Pos(".",IP);
   if P=0 then P:=length(IP)+1;
   Addr.Octets[I]:=String2Int(copy(IP,1,P-1));
   Delete(IP,1,P);
 End;
 IPStr:=Cardinal(Addr);
end;


{
 $Log: abisocks.pas,v $

 Revision 1.0  1999/07/07 09:46:55  gabor
    Original implementation

}



Страницы: 1 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.034 c
1-1097484487
MOV
2004-10-11 12:48
2004.10.24
Область видимости


4-1095791292
Dot
2004-09-21 22:28
2004.10.24
Запись в файл и его создание


14-1096648446
Abuzer
2004-10-01 20:34
2004.10.24
FreeReport


1-1097000507
RedDragon
2004-10-05 22:21
2004.10.24
как мне сохранить переменные, не используя базы данных...


14-1096568677
Роман
2004-09-30 22:24
2004.10.24
Easu GPRS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский