[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. -nEx-

    -nEx- New Member

    Joined:
    11 Nov 2008
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    Как определить динамичный IP ? А то при попытке определить выдает не верный айпи.

    вот используемая функция
    function GetLocalIP: String;
    const WSVer = $101;
    var
    wsaData: TWSAData;
    P: PHostEnt;
    Buf: array [0..127] of Char;
    begin
    Result := '';
    if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
    P := GetHostByName(@Buf);
    if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
    end;
    end;
     
  2. groupby

    groupby Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    А какой айпи он выдает? )))

    Дело в том что для компьютера может существовать несколько адресов: локальный, сетевой, внешний, виртуальный и т.д.

    Короче тебе надо получать не один айпишник, а их список, и из них поттом выбирать внешний.
     
  3. -nEx-

    -nEx- New Member

    Joined:
    11 Nov 2008
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    А как это сделать? Выдает что-то типа 192.168.0.2
     
  4. -nEx-

    -nEx- New Member

    Joined:
    11 Nov 2008
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    Ну так кто-нибудь поможет или нет?
     
  5. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    Code:
    program getip;
    {$APPTYPE CONSOLE}
    
    uses windows,wininet;
    {-----------------------------------}
    function DownloadURL(const aUrl: string; pBuf: pChar; dwSize: cardinal): Boolean;
    var
      hSession: HINTERNET;
      hService: HINTERNET;
      dwBytesRead: DWORD;
    begin
     Result := False;
     hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
     if hSession<>nil then begin
      hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, 0, 0);
      if hService<>nil then begin
       if not InternetReadFile(hService, pBuf, dwSize, dwBytesRead) then begin
        InternetCloseHandle(hService);
    	InternetCloseHandle(hSession);
        exit;
       end;
       InternetCloseHandle(hService);
      end else begin
       InternetCloseHandle(hSession);
       exit
      end; 
      InternetCloseHandle(hSession);
     end else exit;
     result:=true;
    end;
    {-----------------------------------}
    function GetRealIp():string;
    var buf:array[0..4096]of char;
        s,ip:string;
        i1,i2:integer;
    begin
     result:='';
     if not DownloadURL('http://www.cmyip.com/',@buf,sizeof(buf)) then exit;
     s := string(pChar(@buf));
     i1:= pos('My IP is  ',s) + 10;
     i2:= pos('   - Quick and Easy way to SEE my IP address - CmyIP.com',s);
     result:=copy(s,i1,i2-i1);
    end;
    
    BEGIN
     writeln(GetRealIp());
    END.
    вот это должно сработать.

    Турбо паскалем ты это точно не откомпилишь))
    бери делфи или фри паскаль http://freepascal.org/download.var
     
  6. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    ап! Как принять ответ от сервера?
     
  7. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    смотри мой пост на предыдущей странице https://forum.antichat.ru/showpost.php?p=938023&postcount=2310
    там функция DownloadURL закачивает страничку с сайта. Я догадываюсь что тебе как бы нужен метод POST, для этого вместо InternetOpenUrl используй HttpOpenRequest пример которого есть тут: https://forum.antichat.ru/showpost.php?p=937359&postcount=2
     
  8. groupby

    groupby Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Тебе не кажется,
    что твой код - это забивание гвоздей КУВАЛДОЙ )))

    А что делать, если сайты с которых вы пытаетесь получить IP недоступны в данное время )

    Думаю этот код намного юзабельней и лучше:
    http://delphi-faq.zoxt.net/z3.htm
     
  9. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    не кажется.
    так вы узнаете IP-адреса всех сетевых интерфейсов, которые могут не иметь никакого отношения к твоему IP в интернете.
    в большинстве случаев IP пользовательского компа можно узнать только вот так забивая гвозди кувалдой...
    Погугли по теме Network Address Translation
     
  10. groupby

    groupby Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    :D

    Я за работу с сетью и сетевыми протоколами деньги получаю ) Не учи плиз.

    Все локальные IP сразу можно отбросить:
    127.*, 192.*, 10.*, 172.*

    Оставшийся адрес и есть внешний.
     
    2 people like this.
  11. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    внешнего там может и не быть.
    Ведь суть NAT как раз в том, что вместо IP твоего компа подставляется IP шлюза. Причем где этот шлюз твой компьютер может не знать в принципе.
    И внешний адрес этого шлюза достоверно можно узнать ТОЛЬКО тем способом, код к которому я выложил.

    P.S. а все-таки у меня длиннее))
     
  12. groupby

    groupby Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Если нет внешнего IP, значит компьютер не имеет прямого подключения к интернету (т.е. подключен через другой компьютер). И значит найденнный по вашей технологии IP будет не IP адресом конечного компьютера в сети, а лишь IP его роутера. А нафиг нужен IP роутера, если через него связаться с компьютером все равно нельзя (можно, если прокинуть порты, но все равно в итоге программе при таком способе прокидывания внешний IP знать уже не надо)?

    Оффтоп у нас получается )
    В общем какой итог:
    Если нужен внешний IP вашего компа - юзайте мой способ.
    Если нужен внешний IP вашей внутренней сети, то способ bons'a
     
  13. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Для кого писал?
    http://forum.antichat.ru/showpost.php?p=788789&postcount=12

    здесь показано на сокетах.
     
    1 person likes this.
  14. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    De-visible не знаю точно для кого писал

    и еще посоветуйте книгу по сокетам (чтобы было не трудно разжевывать)
     
  15. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    MSDN???GOOGLE???Delphi World???


    но если сложно поискать то вот: http://www.sockets.com/winsock.htm
     
  16. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    De-visible я говорю чтобы было легко читать и разжевывать а не то что тебе попало в поиске (читай внимательнее)
     
  17. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Я дал то, что читал сам, что для тебя легче я не знаю, и прежде чем ТАК спрашивать(попрашайничать) мог сам поискать.
    Я тебе дал пример дал мануал, так, что вперед и с песней.
     
  18. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Подскажите плиз дельфи-код фейка квипа инфиниума,с неня + !
     
  19. Sinay

    Sinay Elder - Старейшина

    Joined:
    1 Sep 2007
    Messages:
    356
    Likes Received:
    365
    Reputations:
    20
    http://forum.inattack.ru/index.php?showtopic=10798&st=0&gopid=97474&
    http://forum.antichat.ru/threadnav79518-1-10.html
    глаза опусти и увидишь,поиск по сайту еще советаю,много таких тем было
     
    1 person likes this.
  20. MCSnake

    MCSnake Elder - Старейшина

    Joined:
    11 Jun 2008
    Messages:
    87
    Likes Received:
    25
    Reputations:
    0
    Всем привет, помогите плиз....
    нужен код на делфи что бы при нажатии на клавишу программа выводила на печать через принтер из текстового окна, в нете искал ниче похожего не нашел((
     
Thread Status:
Not open for further replies.