Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

Сравнение двух 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
14-1096719098
Piter
2004-10-02 16:11
2004.10.24
Как узнать размеры максимизированной формы?


14-1096902511
X9
2004-10-04 19:08
2004.10.24
Новое сокращение или долой "программно"


1-1097223451
Аня
2004-10-08 12:17
2004.10.24
Архивация


1-1097092627
ALex B.
2004-10-06 23:57
2004.10.24
Работа с Timer


14-1096895691
Zacho
2004-10-04 17:14
2004.10.24
Дефрагментация в XP





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