Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как преобразовать длинный IP адрес в короткий адрес-порт

Delphi , Интернет и Сети , TCP/IP

Как преобразовать длинный IP адрес в короткий адрес-порт

Расшифровка аббривеатуры YAHOO(перевод):
Еще один иерархически навязчивый оракул.

Некоторые старые internet протоколы (такие как FTP) посылают IP адреса и номера портов в шестизначном формате XXX.XXX.XXX.XXX.XX.XXX Следующий код позволяет преобразовать такой адрес к нормальному четырёхзначному IP адресу.


procedure LongIPToShort(aLongIPAddress: string;
out ShortIPAddress: string; out PortNumber: Integer);
var
  i, DotPos, tempPort: Integer;
  tempAddy, temp: string;
  TempStr: string;
begin
  tempAddy := '';
  tempStr := '';
  // Определяем, какой символ использует отправитель
  // в качестве разделителя длинного IP: , или .
  if (POS(',', aLongIPAddress) <> 0) then
    TempStr := ','
  else
    TempStr := '.';

  for I := 1 to 4 do
  begin
    DotPOS := POS(TempStr, aLongIPAddress);
    tempAddy := tempAddy + (Copy(aLongIPAddress, 1, (DotPos - 1)));
    if I <> 4 then
      TempADdy := TempAddy + '.';
    Delete(aLongIpAddress, 1, DotPos);
  end;
  DotPos := Pos(TempStr, aLongIpAddress);
  temp := Copy(aLongIpAddress, 1, (DotPos - 1));
  tempPort := (StrToInt(temp) * 256);
  Delete(aLongIpAddress, 1, DotPos);
  TempPort := tempPort + StrToInt(ALongIpAddress);
  ShortIPAddress := TempADdy;
  PortNumber := tempPort;
end;

Переведенный текст:

Код - процедура Delphi под именем LongIPToShort, которая принимает строку длинного IP-адреса и номер порта, разбивает их на фактический IP-адрес и номер порта, и возвращает их в отдельных переменных.

Работает следующим образом:

  1. Сначала определяется используемый разделитель в входной строке - это комма (,) или точка (.). Это делается с помощью функции POS.
  2. Затем циклится четыре раза, чтобы извлечь каждый частный элемент IP-адреса. В каждом итерации находит позицию текущего разделителя с помощью POS, копирует подстроку перед этим разделителем в переменную tempAddy, добавляет точку (если это не последняя итерация), а затем удаляет извлеченную подстроку из оригинальной строки.
  3. После извлечения всех четырех частей IP-адреса находит следующее вхождение разделителя в оставшейся части входной строки (которая должна быть номером порта).
  4. Извлекает номер порта как строку с помощью Copy, конвертирует ее в целое число с помощью StrToInt, умножает на 256, чтобы учитывать факт, что каждый байт в двухбайтовом номере порта представляет 256 возможных значений, и затем добавляет значение оставшейся части входной строки (которая также конвертируется в целое число), чтобы получить окончательный номер порта.
  5. Наконец, возвращает извлеченный IP-адрес и номер порта как строки.

Альтернативное решение с использованием регулярных выражений:

procedure LongIPToShort(aLongIPAddress: string; out ShortIPAddress: string; out PortNumber: Integer);
var
  Match: TMatch;
begin
   // Использует регулярное выражение для извлечения IP-адреса и номера порта
  if TryStrMatch('\b(\d{1,3}\.){3}\d{1,3}:(\d{1,5})\b', aLongIPAddress, Match) then
  begin
    ShortIPAddress  := Match.Groups[1].Value;
    PortNumber  := StrToInt(Match.Groups[2].Value);
  end
  else
  begin
     // Обрабатывает случай, когда входная строка не соответствует ожидаемому формату
     // Например, вы можете выбросить исключение или вернуть дефолтное значение
  end;
end;

Это решение использует встроенную поддержку регулярных выражений Delphi (через функцию TryStrMatch) для извлечения IP-адреса и номера порта из входной строки. Регулярное выражение \b(\d{1,3}\.){3}\d{1,3}:(\d{1,5})\b соответствует строке, которая начинается с IP-адреса, за которым следует двоеточие и двухбайтовый номер порта.

Обратите внимание, что это решение предполагает, что входная строка следует стандартному формату IP-адреса (четыре числа, разделенные точками), за которым следует двоеточие и двухбайтовый номер порта. Если вам нужно обрабатывать более сложные или неправильно сформированные входные строки, вы может захотеть использовать более robust подход к парсингу.

В статье описывается процедура преобразования длинного IP-адреса в короткий адрес-порт, используемая для старых интернет-протоколов, таких как FTP.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TCP/IP ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 00:52:09/0.0034818649291992/0