function GetDomainName(Ip:string):string; //由IP得到计算机名
function GetDomainName(Ip:string):string;
var pH:PHostent;
data:twsadata;
ii:dword;
begin
WSAStartup($101, Data);
ii:=inet_addr(pchar(ip));
pH:=gethostbyaddr(@ii,sizeof(ii),PF_INET);
if (ph<>nil) then Result:=pH.h_name
else Result:='';
WSACleanup();
end;
肯定能用的哦^_*不过可能只对同一工作组的有效~~对于第一个问题,你先判断是否是IP地址,再由IP地址得到机器名不就得了?
function GetDomainName(Ip:string):string;
var pH:PHostent;
data:twsadata;
ii:dword;
begin
WSAStartup($101, Data);
ii:=inet_addr(pchar(ip));
pH:=gethostbyaddr(@ii,sizeof(ii),PF_INET);
if (ph<>nil) then Result:=pH.h_name
else Result:='';
WSACleanup();
end;
肯定能用的哦^_*不过可能只对同一工作组的有效~~对于第一个问题,你先判断是否是IP地址,再由IP地址得到机器名不就得了?
else
hostname:=Edit.text;
Boolean = true)
: string;
var
iPos: Integer;
begin
if ADelim = #0 then
begin
iPos := Pos(ADelim, AInput);
end
else
begin
iPos := Pos(ADelim, AInput);
end;
if iPos = 0 then
begin
Result := AInput;
if ADelete then
begin
AInput := ''; { do not localize }
end;
end
else
begin
result := Copy(AInput, 1, iPos - 1);
if ADelete then
begin
Delete(AInput, 1, iPos + Length(ADelim) - 1);
end;
end;
end;
function IsIP(AIP: string): boolean;
var
s1, s2, s3, s4: string; function ByteIsOk(const AByte: string): boolean;
begin
result := (StrToIntDef(AByte, -1) > -1) and (StrToIntDef(AByte, 256) < 256);
end;begin
s1 := Fetch(AIP, '.');
s2 := Fetch(AIP, '.');
s3 := Fetch(AIP, '.');
s4 := AIP;
result := ByteIsOk(s1) and ByteIsOk(s2) and ByteIsOk(s3) and ByteIsOk(s4);
end;
可以用
INET_ADDR(pchar(Edit1.text))试一试
把debugger option里面的default沟掉
然后你就可以输出你的错误提示了
通过IP过的计算机名
uses winsock;
var
WSAData:TWSAData;
p:PHostEnt;
sIP:string;
InetAddr:dword;
begin
WSAStartup(2,WSAData);
sIP:=Edit1.Text;
InetAddr:=Inet_Addr(pchar(sIP));
try
try
p:=GetHostByAddr(@InetAddr,Length(sIP),PF_Inet);
memo1.Lines.Add('IP:'+sIP);
memo1.Lines.Add('Host:'+p^.h_name);
finally
WSACleanup;
end;
except
memo1.Lines.Add('无法得到');
end;
end;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
begin
WSAStartup(2, WSAData);
HostEnt := gethostbyname(PChar(Name));
with HostEnt^ do
Result := Format('%d.%d.%d.%d', [Byte(h_addr^[0]),
Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
WSACleanup;
end;
var
Reg : TRegistry;
begin
Reg := TRegistry.create;
Result := '(n/a)';
with Reg do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('System\CurrentControlSet\Services\VxD\VNETSUP',
false) then
Result := ReadString('Workgroup');
finally
CloseKey;
free;
end;
end;