怎样获得本地IP地址? (100分)

  • 主题发起人 主题发起人 hwj757575
  • 开始时间 开始时间
H

hwj757575

Unregistered / Unconfirmed
GUEST, unregistred user!
这里怎么不能用全文检索了呢?
请问怎么样获得本地的IP地址?
我用下面的方法,但只能得到内网的IP,如何得到外网的IP呢?
function LocalIP : string;
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 := '';
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:=StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;
 
前面有这样的帖子:)
我的解决方法:

winexec('ipconfig /batch d:/ip.txt',sw_hide);
将它保存到一个文本里,然后对这个文本进行处理就可以了

可以用一个tstringlist变量来取出文本内容
 
这个方法我以前也见过,不过有的操作系统里是没有ipconfig的!所以通用性不是很好!
我记得以前的贴子里也有,但现在我用不了全文检索了,不知道是这个网站的事,还是我电脑的事!谢谢回复!
 
先在读取HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/NetBIOS/Linkage下的bind的值.分析出网卡的本机网络连接的串/Device/NetBT_Tcpip_{96303D8B-DC68-44E6-906E-EA7AEC836609},然后在
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters/Interfaces
下找到{96303D8B-DC68-44E6-906E-EA7AEC836609}项.在其下就能看到IPAddress.mask.defaultgateway等信息
 
  如果上网方式是通过ADSL猫共享上网,每台机器的内网分别是192.168.1.2~192.168.1.255之间的值,网关是192.168.1.1,就是ADSL猫的IP,而上网后真正的IP是202.92.XX.XX,那么你的方法显示出的是192.168.1.X还是202.92.XX.XX呢?
  我是想得到那么202.92.XX.XX这个值,请大家帮助!
 
请到
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1803336
不知道有没有你满意的!
 
谢谢,我已经找到答案了,但还没有测试!
答案在这里:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1717380
 
program get_ip;

uses

winsock,sysutils;

VAR

ch : ARRAY[1..32] OF Char;

i : Integer;

WSData: TWSAData;

MyHost: PHostEnt;

begin

IF WSAstartup(2,wsdata)<>0 THEN

BEGIN

Writeln('can''t start Winsock: Error ',WSAGetLastError);

Halt(2);

END;

try

IF getHostName(@ch[1],32)<>0 THEN

BEGIN

Writeln('getHostName failed');

Halt(3);

END;

except

Writeln('getHostName failed');

halt(3);

end;

MyHost:=GetHostByName(@ch[1]);

IF MyHost=NIL THEN

BEGIN

Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error

'+IntToStr(WSAGetLastError));

Halt(4);

END

ELSE

BEGIN

Write('address ');

FOR i:=1 TO 4 DO

BEGIN

Write(Ord(MyHost.h_addr^[i-1]));

IF i<4 THEN

then write('.')

ELSE

writeln;

END;

END;

end.

 
先登录到一个查IP的网站,得到IP,用copy和pos得到这个IP,就可以了,不过如果这个查IP的网站关了就完了,呵呵!
 
接受答案了.
 
后退
顶部