IP адрес от програма

9 отговора 375 прегледа
#1

IP адрес от програма

Как да прочета IP адреса на компютъра от програма на Делфи?

Отговор
в отговор на Учeниka #2

Re: IP адрес от програма

uses
Winsock;

{...}

function getIPs: Tstrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Result := TstringList.Create;
Result.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^ <> nil do
begin
Result.Add(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines := GetIps;
end;

Отговор
в отговор на Учeниka #3

Re: IP адрес от програма

function GetLocalIP: String;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
HostName: Array[0..128] of Char;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
if GetHostName(HostName, 128) = 0 then begin
HostEnt:= GetHostByName(HostName);
if HostEnt <> nil then begin
SockAddrIn.sin_addr.S_addr := LongInt(PLongInt(HostEnt^.h_addr_list^)^);
Result := inet_ntoa(SockAddrIn.sin_addr);
end else Result := '';
end else Result := '';
end;

Отговор
в отговор на PassionKiller #4

Re: IP адрес от програма

напоследък все повече се убеждавам, че голяма част от програмистите в българия са абсолютни юзъри.

ако можеш да ми обясниш за какво въобще ползваш TSockAddrIn параметъра или само да попрехвърлиш безсмислено LongInt стойност.

абе хора, престанете copy/paste да пишете софтуер. на клиентите им е почнало да им се драйфа от подобни юзъри дето им пробутват всевъзможен shit за софтуер.

Отговор
в отговор на r4ndOm #5

Re: IP адрес от програма

е, тва е яко и идейно.

по-наблюдателните от вас ще забележат, че и тук има едно I което хич не се вързва в целия пейзаж. ако се опитате да компилирате показания код в Delphi 5, няма да тръгне. малко анализ показва, че някой се е изакал леко (или на мен ми е странно такова записване, може и да греша ползвам предимно C++).

та ако включим и 'висящото I' и вместо copy/paste юзърски код решим да помислим малко преди да пишем програми, това би трябвало да сработи:

function getIPs: Tstrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Result := TstringList.Create;
Result.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while (pPtr^) <> nil do
begin
Result.Add(inet_ntoa(pPtr^^));
Inc(I);
end;
WSACleanup;
end;

представяте ли си, сега дори и I-то си има смисъл.

но примера е идеен! супер! благодаря на този, който го е постнал (откъдето и да го е изкопирал, макар и неграмотно).

Отговор
в отговор на BashBabait #6

Re: IP адрес от програма

упс. май виновниците са ДИРник Бай-Ганю (известни най-вече като дир.бг).
извинявам се но като, че ли техните програмисти серат (обществен факт).

ако този код долу не се копира с [ i ] в скобите, значи лайнцата са програминг-лузърите и пръц-админите от ДИРник-а (бел.пр. дирник - задник).

function getIPs: Tstrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Result := TstringList.Create;
Result.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while (pPtr^) <> nil do
begin
Result.Add(inet_ntoa(pPtr^^));
Inc(I);
end;
WSACleanup;
end;

Отговор
в отговор на BashBabait #7

Re: IP адрес от програма

не става. алооо. ДИРниците, как да копираме код от Delphi без да се изака вашият скрипт върху него ?

function getIPs: Tstrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Result := TstringList.Create;
Result.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while (pPtr^[ i ]) <> nil do
begin
Result.Add(inet_ntoa(pPtr^[ i ]^));
Inc(I);
end;
WSACleanup;
end;

Отговор
в отговор на BashBabait #8

Re: IP адрес от програма

@BashBabait, щом си такъв голяма специалист, вземи и напиши правилния код вместо да се заяждаш и да се правиш на "интересен". От такива "критици" като теб няма смисъл.
Човека е задал въпрос и иска да получи отговор, а как да се научи, като ти не споделяш знанията си, а само критикуваш.

Отговор
в отговор на BashBabait #9

Re: IP адрес от програма

Ми то не е лошо и да се чете като се пише...

"За да участвате в клуба попълнете следващата форма. HTML е забранен. Можете да използвате МЕТА ЕЗИК. Кликнете Т У К. , за да разберете подробно как. "

Да си забелязал тага PRE? Бабаитчето на батко - по долу ревеш да не се Copy/Paste-ва ...

чети и дишай по-леко
Отговор
в отговор на BashBabait #10

добре, [ i ] се вижда, ама...

щеше да е по четливо с [ pre ] и [ / pre ]

Отговор