Конференция "FreePascal" » [Lazarus] Существует ли функция "является ли строка IPv4-адресом" [Win32, другое]
 
  • Вайрекс (25.10.17 23:23) [0]
    Имеется ввиду нет ли явных опечаток. Надо покачто для десятичного представления. Например "0.0.7000.0" или "8.8.8.8.8.8" - явно не является IP-адресом.
    Интересует именно существует ли в Lazarus своя готовая кроссплатформенная функция. Навелосипедить-то я могу, но хочется по возможности использовать библиотечное. =))

    З.Ы. На всякий случай, по теме: http://www.delphimaster.net/view/2-1317733017
         Лазарус правда ругается на код с inet_addr+gethostbyname, и что ему не нравится я чёт не понял...
  • han_malign © (26.10.17 12:23) [1]

    > существует ли в Lazarus своя готовая кроссплатформенная функция

    - существует - но она однозначно кривая(наивный парсер через pos('.'), copy и val(int))
    так что разбирайся - и что ему не нравится в inet_addr
  • rrrrrr © (26.10.17 19:52) [2]
    Надо покачто для десятичного представления

    ну допустим, что она есть.

    ты счастлив, но теперь тебе нужны еще две функции
    одна должна сказать, что адрес ниже указан в восмеричной нотации,
    и проверять его нужно в третьей функции которая "более другая" чем первая, которая допустим уже есть.

    http://0255.0302.0334.0136
  • rrrrrr © (26.10.17 20:05) [3]
    даже допустим что их есть три и даже тридцать три.

    что в итоге?
    в итоге два разных варианта,
    но одинаковые своей беспомощностью

    try
    inet_addr+gethostbyname
    exception
    showmessage('вронг аддресс! бат ай кан нот тел ю ватс там вронг');
    end

    if address_nod_valid(myaddress) then
    showmessage('аддрессиз стил вронг! анд ай стил каннот телью энисинг что там вронг');
  • Вайрекс (27.10.17 00:32) [4]
    Спасибо!

    > так что разбирайся - и что ему не нравится в inet_addr

    Да я просто читал ту ветку, читал, дай думаю скопипастю кусок кода, запущу, гляну что да как.
    Не компилит. Просто удивился сему.


    > существует - но она ...

    эм... Дак а название-то еёное можна услышать?))

    > ... но теперь тебе нужны еще две функции ...

    эм..... Не-а. Не нужны. %)
    Специфика задачи. Должно быть в десятичной в 99% случаев.
    Вероятность что когда-либо понадобится в другой - крайне мелкая.
  • rrrrrrr © (27.10.17 08:38) [5]
    дело не в вероятностях.

    а дело в том, что функция эта ничего тебе не даст сверх того, что у тебя и так уже есть.
  • han_malign © (10.11.17 16:26) [6]

    > http://0255.0302.0334.0136

    http://173.0302.0334.0x5E

    \lazarus\fpc\3.0.2\source\packages\rtl-extra\src\inc\sockets.inc
    function StrToHostAddr(IP : AnsiString) : in_addr ;

    Var
       Dummy : AnsiString;
       I,j,k     : Longint;
       Temp : in_addr;

    begin
     strtohostaddr.s_addr:=0;              //:=NoAddress;
     For I:=1 to 4 do
       begin
         If I<4 Then
           begin
             J:=Pos('.',IP);
             If J=0 then
               exit;
             Dummy:=Copy(IP,1,J-1);
             Delete (IP,1,J);
           end
          else
            Dummy:=IP;
         Val (Dummy,k,J);
         array4int(temp.s_addr)[i]:=k;
         If J<>0 then Exit;
      end;
      strtohostaddr.s_addr:=ntohl(Temp.s_addr);
    end;


    - но для нее http://100500.-17.&334.%1010101
    - будет вполне правильным...
  • han_malign © (10.11.17 16:37) [7]
    но самое забавное, что StrToHostAddr('0255.0302.0334.0136') - приведёт совершенно в другое место...
  • DayGaykin © (30.11.17 12:36) [8]
  • DayGaykin © (30.11.17 12:40) [9]
    Вот еще забавнее:
    http://yandex.ru@2915228766/
 
Конференция "FreePascal" » [Lazarus] Существует ли функция "является ли строка IPv4-адресом" [Win32, другое]
Есть новые Нет новых   [88911   +5][b:0.001][p:0.004]