Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2009, 14:47   #1
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
Вопрос Как узнуть все IP компьютера?

Мне нужно узнать интернет ip компьютера (допустим vpn или модема) я нашёл код
Код:
Функции GetTcpTable, GetUdpTable. 

Импорт GetTcpTable: 
unit TcpTable;
interface
type
  PDWord = ^Longword;
  PMIB_TCPROW = ^TMIB_TCPROW;
  TMIB_TCPROW = record
    dwState: LongWord;
    dwLocalAddr: LongWord;
    dwLocalPort: LongWord;
    dwRemoteAddr: LongWord;
    dwRemotePort: LongWord;
  end;
  PMIB_TCPTABLE = ^TMIB_TCPTABLE;
  TMIB_TCPTABLE = record
    dwNumEntries: LongWord;
    table: array[0..0] of TMIB_TCPROW;
  end;

function GetTcpTable(var TcpTable: PMIB_TCPTABLE;
  var Size: PDWord; bOrder: Boolean): LongWord; stdcall

implementation

function GetTcpTable; external 'Iphlpapi.dll' name 'GetTcpTable';

end.

Вызов GetTcpTable: 
{$R-}
Entries := 16;
Sz := SizeOf(TMIB_TCPTABLE) + SizeOf(TMIB_TCPROW) * (Entries - 1);
pMibTable := nil;
try
  repeat
    ReallocMem(pMibTable, Sz);
    Res := GetTcpTable(pMibTable^, Sz, False);
  until Res <> ERROR_INSUFFICIENT_BUFFER;
  if Res <> NO_ERROR then
  begin
    ShowMessage(SysErrorMessage(Res));
    exit;
  end;
  for Entries := 0 to pMibTable.dwNumEntries - 1 do
  begin
    < Делать что - то >
  end;
finally
  FreeMem(pMibTable);
end;
{$R+}
Но у меня он не работает, или я пользуюсь им не правильно, подскажите как?
dolphin705 вне форума Ответить с цитированием
Старый 07.06.2009, 15:47   #2
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Или как можно сделать так, чтобы программа забрала его отсюда??? http://ddns.cis.by/nic/
dolphin705 вне форума Ответить с цитированием
Старый 07.06.2009, 16:01   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Стрелка

Вот это подойдёт?
Код:
uses Registry;
...................
  public
   Procedure GetAllIP(Lst :TStrings); // выдать список всех IP машины
   function ReadMultirowKey(Reg :TRegistry; Key :string):TStrings;
    { Public declarations }
  end;

...................

function TForm1.ReadMultirowKey(reg: TRegistry; Key: string): TStrings;
const
  bufsize = 100;
var
  i: integer;
  s1: string;
  sl: TStringList;
  bin: array[1..bufsize] of char;
begin
    Result := nil;
  try
    sl := nil;
    sl := TStringList.Create;
    if not Assigned(reg) then
      raise Exception.Create('TRegistry object not assigned.');
    FillChar(bin, bufsize, #0);
    reg.ReadBinaryData(Key, bin, bufsize);
    i := 1;
    s1 := '';
    while i < bufsize do
    begin
      if ord(bin[i]) >= 32 then
        s1 := s1 + bin[i]
      else
      begin
        if Length(s1) > 0 then
        begin
          sl.Add(s1);
          s1 := '';
        end;
      end;
      inc(i);
    end;
    result := sl;
  except
    sl.Free;
    raise;
  end;
end;

Procedure TForm1.GetAllIP(Lst :TStrings);
Const
  Rt = HKEY_LOCAL_MACHINE; 
  SubItm = 'SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\';
var I,II :Integer;
    fLst :TStrings;
    Reg :TRegistry;
    S :String;
begin // выдать список всех IP машины
 Lst.Clear;
 Reg := TRegistry.Create;
 fLst := TStringList.Create;
 fLst.Clear;
  Try
 Lst.Add('localhost');  
 Reg.RootKey := Rt;

 If Reg.OpenKeyReadOnly(SubItm) then
 begin
  Reg.GetKeyNames(fLst);
  Reg.CloseKey;
 end;

 II := fLst.Count;
 If II>0 then
 For I:=0 to II-1 Do
 begin
  S := '';
  If Reg.OpenKeyReadOnly(SubItm + fLst.Strings[I] + '\') then
  begin
   If Reg.ValueExists('IPAddress') then
   begin 
     S := ReadMultirowKey(Reg, 'IPAddress').CommaText;
     S := Trim(S);
    If (S<>'0.0.0.0')And(S<>'') then
     Lst.Add(S);
    S := '';
   end;

   If Reg.ValueExists('DhcpIPAddress') then
   begin 
     S := Reg.ReadString('DhcpIPAddress');
     S := Trim(S);
    If (S<>'0.0.0.0')And(S<>'') then
     Lst.Add(S);
   end;  
    Reg.CloseKey;
  end;
 end;
  Finally
 Reg.Free;
 fLst.Free;
  End;
end;
Alter вне форума Ответить с цитированием
Старый 07.06.2009, 16:15   #4
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Alter, нет, не то...
dolphin705 вне форума Ответить с цитированием
Старый 07.06.2009, 16:30   #5
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Я делаю так
Код:
Edit1.Text:= IdHTTP1.Get('http://ddns.cis.by/nic/');
Приходит следующее

<html><head><title>Current IP Check</title></head><body>Current IP Address: 000.000.000.000</body></html>


000.000.000.000 - это какой либо ip вот как его вырезать???
dolphin705 вне форума Ответить с цитированием
Старый 07.06.2009, 17:26   #6
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

А чем мой способ плох, он выдавал все активные IP на машине.
Ну вот вам как сами хотели:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Const
 Pars :Array[0..1]of String=('<html><head><title>Current IP Check</title></head><body>Current IP Address: ',
                             '</body></html>');
var S :String;
begin
  Edit1.Clear;
 S := IdHTTP1.Get('http://ddns.cis.by/nic/');
 Delete(S, 1, Length(Pars[0]));
 Delete(S, Pos(Pars[1], S), Length(Pars[1])+1);
  Edit1.Text := S;
end;

end.
Alter вне форума Ответить с цитированием
Старый 07.06.2009, 18:14   #7
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Большое спасибо за помощь, а что касается того кода, то мне кажется там много лишнего
dolphin705 вне форума Ответить с цитированием
Старый 26.03.2011, 19:13   #8
Letnab
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 52
По умолчанию

а какой функцией можно вытащить 1 ip по первым цифрам.
Допустим. Просканировали комп и если есть ip '172.22' то вытаскиваем его в label??
Letnab вне форума Ответить с цитированием
Старый 11.01.2012, 02:26   #9
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Alter Понял огромное спасибо . А как будет чтобы получит все ip адрес который подключен локальный сети &
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать все IP-адреса компьютера. Proger10 Работа с сетью в Delphi 8 19.02.2012 00:14
Как соединить 2 компьютера через Bluetooth kikoz Операционные системы общие вопросы 6 27.10.2008 23:08
Армия 21 века или как отдохнуть от компьютера Air Свободное общение 42 24.06.2008 08:40
Как програмно завершить работу компьютера? Bill Gates Win Api 4 07.01.2008 11:35
как завершить роботу компьютера с помощью кода Amor_06 Безопасность, Шифрование 10 06.01.2008 23:30