如何取机器的IP地址?

Xinhao 2003-01-06 10:03:51
若有一代理主服务器A IP地址为10.1.1.20,另一从代理服务器B IP地址为10.34.23.45 通过代理服务器A上网,而代理服务器B下另有168.192.34.XXX类客户端C。现用Indy Misc 中IPWatch控件从客户端只能取得192.168.34.XXX,怎样才能取得服务器A 的IP地址10.1.1.20 或将其上级代理器IP全部取得。

望不吝赐教。
...全文
79 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xinhao 2003-01-17
  • 打赏
  • 举报
回复
请高手不吝赐教
gselec 2003-01-11
  • 打赏
  • 举报
回复
9494,不是服务器的地址,要取服务器的地址,大概需要一级级拆分ip包,不过不会:)

关注
Xinhao 2003-01-11
  • 打赏
  • 举报
回复
楼上两位取的均是本地地址,即上文所指客户端 C 的地址,而我希望取得 A,B 的地址。
chenkandy 2003-01-07
  • 打赏
  • 举报
回复
USES winsock就可以阿
wisenowa 2003-01-07
  • 打赏
  • 举报
回复
to jackie168(星星知我心) 没那么多代码吧?

uses WinSock;

function GetLocalIP: string;
var
wVersionRequested: WORD;
wsaData: TWSAData;
p: PHostEnt;
s: array[0..128] of Char;
begin
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
try
GetHostName(@s, 128);
p := GetHostByName(@s);
Result := StrPas(iNet_ntoa(PInAddr(p^.h_addr_list^)^));
finally
WSACleanup
end
end;
jackie168 2003-01-07
  • 打赏
  • 举报
回复
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
Result := '';
WSAStartup($101, GInitData);
try
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe <> nil then
begin
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
result := StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
end;
finally
WSACleanup;
end;
end;
-------------------------
然后在form的OnShow 事件写入
edit1.text:=LocalIP;


======================即可看到你的IP
Xinhao 2003-01-06
  • 打赏
  • 举报
回复
楼上的代码在我机器上运行到 wsastartup(2,wsdata)处产生错误,无法进行调试。我的方法为直接引用 uses IdWinsock。是否要加其它控件或其它引用。
chenkandy 2003-01-06
  • 打赏
  • 举报
回复
var
LEN:DWORD;
NAME:PCHAR;
HOST:PHOSTENT;
IP,ipstr,IPTOTAL,IPPART,IPALL:STRING;
i:integer;
wsdata:twsadata;
begin
if wsastartup(2,wsdata)<>0 then
begin
msg.Caption :='WS2_32.DLL初始化失敗!';
abort;
end;
LEN:=30;
GETMEM(NAME,30);
GETCOMPUTERNAME(NAME,LEN);
HOST:=GETHOSTBYNAME(NAME);
IF HOST=NIL THEN
BEGIN
MSG.Caption :='IP地址為空';
HALT;
END
ELSE
BEGIN
IPTOTAL :=HOST.H_NAME;
IPPART:=CHR(HOST.H_ADDRTYPE+64);
FOR I:=1 TO 4 DO
BEGIN
IP:=INTTOSTR(ORD(HOST.H_ADDr^[i-1]));
ipstr:=ipstr+ip;
if i<4 then
ipstr:=ipstr+'.'
Else IPALL :=ipstr;
END;
END;
wsacleanup;
end;
ipall中就是你的ip 地址
superhard 2003-01-06
  • 打赏
  • 举报
回复
trace
Xinhao 2003-01-06
  • 打赏
  • 举报
回复
在线等候

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧