Главная страница
    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.032 c
4-1095856824
Vikont
2004-09-22 16:40
2004.10.24
Сканкоды


1-1097234888
andruxa
2004-10-08 15:28
2004.10.24
System Erro. Code:1400. Недопустимый дескриптор окна


14-1097034845
Думкин
2004-10-06 07:54
2004.10.24
С днем рождения! 6 октября


3-1096012932
WG
2004-09-24 12:02
2004.10.24
Как сбросит результат SQL-запрос из TQuery в TTable ?


1-1097513743
Shved
2004-10-11 20:55
2004.10.24
Путь к файлам





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский