高手请进,不够分还可加。如何用DELPHI取得我目前正在访问的服务器IP地址?(50分)

  • 主题发起人 主题发起人 jingzux
  • 开始时间 开始时间
J

jingzux

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用DELPHI取得当前正在访问的服务器的IP地址?用什么方法或API?请高手指教。
不管是OICQ、浏览网页或其它。
 
不会,不过对不同的协议和服务应该有不同的方法。
windows到是有个这样的东东
 
用一个 sniffer ?
 
在程序中调用PING,然后取得返回信息就行了!
 
用socket api的函数getserverbyname或者getserverbyaddr
 
ping 不行么?
 
都是基于TCP/IP的。。。。。。。。。所以你得做一个。。。。。。。FILER?
 
ISAPI filter.....
大概行。
 
如何用DELPHI取得当前正在访问的服务器的IP地址?
最原始的方法:
假定服务器的域名WWW.126.COM
1. NMhttp
GET('HTTP://WWW.126.COM');
在ONSUCCESS事件中得到REMOTEIP
2.Clientsocket
host:='www.126.com';
port:=80;
open;
在onconnect事件中
socket.remoteaddress就是.

 
将NETSTAT的内容重定向到一个文本文件中,再用DELPHI程序读出来。
 
Jamw 高!实在是高。即简单又直接,且通俗易懂。
我加一点
winexec('netstat /a>fffy.txt');
再打开就行。
高!实在是高。
 
其实真正的好方法是 sungw 的那个!
 
用这个winexec('netstat /a>fffy.txt')在DOS下可以,在程序中运行不能重定向生成文
件。用GET('HTTP://WWW.126.COM')必需知道网址,用Clientsocket也是一样,不符合本意。
能否象netstat一样不用任何参数的方法?
 
靠,好象用NetStat从定向到文本文件是我在IRC上回答别人时发表的秘技,怎么被剽窃到这里来了
 
Function GetIPByName(AName: String): 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 := '';
StrPCopy(Buffer, AName);
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;

参数为Server或其它计算机的名字.在局域网上通过

如果在 Interner 上,可以这样(可惜是VC版本,自己改吧)
void CQLookupDlg::OnFind()
{
LPHOSTENT lpHostEnt;
CString IPAddr;

lpHostEnt = gethostbyname((LPCSTR)m_HostName);
if(!lpHostEnt)
MessageBox("Could not get IP addr");
else{
IPAddr = inet_ntoa(*(LPIN_ADDR)*(lpHostEnt->h_addr_list));

UpdateData();
m_HostAddr = IPAddr;
UpdateData(false);
}
}

 
uses WinSock;
function DomainName2IP(Name: string): string;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
begin
Result := '';
WSAStartup(2, WSAData);
HostEnt := gethostbyName(Pchar(Name));
if HostEnt = nil then Exit;
with HostEnt^ do
Result := PChar(Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]),Byte(h_addr^[2]), Byte(h_addr^[3])]));
WSACleanup;
end;
 
小弟水平有限,只会用最原始的方法:
winexec('c:/windows/ping.exe 正在访问的网站名字');
试试吧,估计可行。
 
更正:
应是winexec('c:/windows/ping.exe 正在访问的网站名字>aa.txt');
条件:先建立aa.txt文件。对不起,一时马虎,忘了后面应带的东东。
 
winexec不能直接实现重定向的,你得先写个批处理,再用winexec执行批处理
 
jingzux:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
后退
顶部