在局域网中,知道对方的电脑名字,怎么得到IP地址
2009-06-28 11:32
555 查看
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
winsock;
const
err_netnotready=$ffff;
err_range=10000;
type
tAddr=array[1..4] of byte;
tsin=TSOCKADDRin;
const
all_send=0;
single_send=1;
var
gs,gr:tsocket;
gsin:tsin;
gtd:taddr;
gmy_name:string;
gsend_type:integer;
grecv_type:integer;
function bind_socket(var s:tsocket;var sin:tsockaddrin):integer;
function get_socket(var s:tsocket;sock_type:integer):integer;
function get_dest_addr(name:string;var sin:TSOCKADDRin;var td:taddr):integer
;
function get_host_name:string;
function get_host_addr(var sin:TSOCKADDRin;var td:taddr):integer;
function get_my_addr:taddr;
function connect_des(s:tsocket;name:string;var sin:TSOCKADDRin;var td:taddr)
:integer;
function sendmsgto(client:string;msg:string):integer;
function recvmsgfrom(VAR client:string;var msg:string):integer;
function check_peername(client:string):integer;
implementation
function bind_socket(var s:tsocket;var sin:tsockaddrin):integer;
var
i,res:integer;
alport:integer;
begin
alport:=IPPORT_RESERVED;
for i:=1 to IPPORT_RESERVED div 2 do
begin
sin.sin_port:=htons(alport);
RES:=BIND(S,SIN,SIZEOF(SIN));
if res=0 then break;
alport:=alport-1;
end;
if res<>0 then res:=wsagetlasterror;
bind_socket:=res;
end;
function get_socket(var s:tsocket;sock_type:integer):integer;
var
af,typ,procol:integer;
wsdata:twsadata;
wver:word;
res:integer;
begin
af:=PF_INET;
TYP:=sock_type;
PROCOL:=0;
wver:=makeword(1,1);
res:=wsastartup(wver,wsdata);
s:=socket(af,typ,procol);
get_socket:=res;
end;
function get_dest_addr(name:string;var sin:TSOCKADDRin;var td:taddr):integer
;
var
i,alport:integer;
st:string;
hp:phostent;
server:array[1..80] of char;
begin
fillchar(td,sizeof(td),0);
i:=sizeof(server);
fillchar(server,sizeof(server),0);
st:=name;
move(st[1],server,length(st));
hp:=gethostbyname(@server);
if hp=nil then
begin
get_dest_addr:=-1;
exit;
{halt;}
end;
move(hp^.h_addr_list^,sin.sin_addr.s_addr,hp^.h_length);
SIN.SA_FAMILY:=hp^.h_addrtype;
alport:=IPPORT_RESERVED;
sin.sin_port:=htons(alport);
sin.sin_addr.s_un_b.s_b1:=hp^.h_addr_list^[0];
sin.sin_addr.s_un_b.s_b2:=hp^.h_addr_list^[1];
sin.sin_addr.s_un_b.s_b3:=hp^.h_addr_list^[2];
sin.sin_addr.s_un_b.s_b4:=hp^.h_addr_list^[3];
move(hp^.h_addr_list^[0],td[1],4);
end;
function get_host_name:string;
var
i:integer;
hp:phostent;
server:array[1..80] of char;
begin
i:=sizeof(server);
gethostname(@server,i);
hp:=gethostbyname(@server);
get_host_name:=hp^.h_name;
end;
function get_host_addr(var sin:TSOCKADDRin;var td:taddr):integer;
var
i,alport:integer;
st:string;
hp:phostent;
server:array[1..80] of char;
begin
fillchar(td,sizeof(td),0);
i:=sizeof(server);
gethostname(@server,i);
hp:=gethostbyname(@server);
move(hp^.h_addr_list^,sin.sin_addr.s_addr,hp^.h_length);
SIN.SA_FAMILY:=hp^.h_addrtype;
alport:=IPPORT_RESERVED;
sin.sin_port:=htons(alport);
sin.sin_addr.s_un_b.s_b1:=hp^.h_addr_list^[0];
sin.sin_addr.s_un_b.s_b2:=hp^.h_addr_list^[1];
sin.sin_addr.s_un_b.s_b3:=hp^.h_addr_list^[2];
sin.sin_addr.s_un_b.s_b4:=hp^.h_addr_list^[3];
move(hp^.h_addr_list^[0],td[1],4);
end;
function get_my_addr:taddr;
VAR
s:tsocket;
RES:INTEGER;
td:taddr;
SIN:TSOCKADDRin;
begin
get_socket(gs,SOCK_dgram);
get_host_addr(sin,td);
bind_socket(gs,sin);
move(sin.sin_addr.s_addr,result,4);
{ closesocket(gs);}
{******}
end;
function connect_des(s:tsocket;name:string;var sin:TSOCKADDRin;var td:taddr)
:integer;
VAR
i,res:INTEGER;
st:string;
alport:integer;
begin
get_dest_addr(name,sin,td);
RES:=connect(S,SIN,SIZEOF(SIN));
if res=0
then
connect_des:=res
else
connect_des:=wsagetlasterror;
end;
function sendmsgto(client:string;msg:string):integer;
var
st:string;
i,res:integer;
sin:tsockaddrin;
td:taddr;
ts:tsocket;
t1:double;
buf:array[1..10] of byte;
l:integer;
begin
st:=gmy_name+':'+msg;
get_socket(ts,sock_dgram);
get_host_addr(sin,td);
bind_socket(ts,sin);
get_dest_addr(client,sin,td);
if gsend_type=all_send then
begin
st:=char(255)+st;
sin.sin_addr.s_un_b.s_b1:=char($ff);
sin.sin_addr.s_un_b.s_b2:=char($ff);
sin.sin_addr.s_un_b.s_b3:=char($ff);
sin.sin_addr.s_un_b.s_b4:=char($ff);
end
else
st:=char(0)+st;
fillchar(buf,sizeof(buf),0);
buf[1]:=1;l:=sizeof(buf);
res:=setsockopt(ts,sol_socket,SO_BROADCAST,
pchar(@buf),l);
{ repeat
setlength(st,10000);
fillchar(st[1],10000,'a');
res:=sendto(ts,st[1],length(st),0,sin,sizeof(sin));
until false;}
res:=sendto(ts,st[1],length(st),0,sin,sizeof(sin));
if res=-1 then
begin
res:=wsagetlasterror;
closesocket(ts);
halt;
end;
t1:=time;
repeat
until (time-t1)>0.000001574;
sendmsgto:=res;
closesocket(ts);
end;
function recvmsgfrom(VAR client:string;var msg:string):integer;
var
st:string;
t,i,j,res:integer;
sin:tsockaddrin;
td:taddr;
buf:array[1..10] of byte;
l:integer;
hp:phostent;
ts:tsocket;
t1:double;
begin
{ td:=get_my_addr;}
{closesocket(gs);}
{ get_my_addr;}
{ get_socket(ts,sock_dgram);}
{ get_host_addr(sin,td);
bind_socket(gs,sin);
{ get_my_addr;}
{ get_host_addr(sin,td);
bind_socket(gs,sin);}
{get_dest_addr(client,sin,td);}
closesocket(gs);
{ wsacleanup;}
td:=get_my_addr;
i:=1;j:=sizeof(sin);t:=0;
fillchar(buf,sizeof(buf),0);
buf[1]:=1;l:=sizeof(buf);
res:=setsockopt(gs,sol_socket,SO_rcvtimeo,
pchar(@buf),l);
res:=wsagetlasterror;
inc(t);
SETLENGTH(ST,3000);
{ fillchar(sin,sizeof(sin),0);}
{ WSACancelBlockingCall;}
t1:=time;
repeat
until (time-t1)>0.0000001574*5;
res:=recvfrom(gs,ST[1],3000,0,sin,j);
IF (RES<3000) AND (RES>0) THEN
BEGIN
if st[1]=char(255)
then
grecv_type:=all_send
else
grecv_type:=single_send;
SETLENGTH(ST,RES);
move(sin.sin_addr.s_addr,td,4);
{ hp:=gethostbyaddr(@td,10,pf_inet);}
CLIENT:=COPY(ST,2,POS(':',ST)-2);
st:=copy(st,pos(':',st)+1,length(st)-length(client)-1);
end;
if res=-1 then
begin
res:=wsagetlasterror;
recvmsgfrom:=res;
exit;
end;
msg:=st;
recvmsgfrom:=length(st);
end;
function check_peername(client:string):integer;
begin
check_peername:=get_dest_addr(client,gsin,gtd);
end;
begin
gtd:=get_my_addr;
gmy_name:=get_host_name;
closesocket(gs);
wsacleanup;
end.
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
winsock;
const
err_netnotready=$ffff;
err_range=10000;
type
tAddr=array[1..4] of byte;
tsin=TSOCKADDRin;
const
all_send=0;
single_send=1;
var
gs,gr:tsocket;
gsin:tsin;
gtd:taddr;
gmy_name:string;
gsend_type:integer;
grecv_type:integer;
function bind_socket(var s:tsocket;var sin:tsockaddrin):integer;
function get_socket(var s:tsocket;sock_type:integer):integer;
function get_dest_addr(name:string;var sin:TSOCKADDRin;var td:taddr):integer
;
function get_host_name:string;
function get_host_addr(var sin:TSOCKADDRin;var td:taddr):integer;
function get_my_addr:taddr;
function connect_des(s:tsocket;name:string;var sin:TSOCKADDRin;var td:taddr)
:integer;
function sendmsgto(client:string;msg:string):integer;
function recvmsgfrom(VAR client:string;var msg:string):integer;
function check_peername(client:string):integer;
implementation
function bind_socket(var s:tsocket;var sin:tsockaddrin):integer;
var
i,res:integer;
alport:integer;
begin
alport:=IPPORT_RESERVED;
for i:=1 to IPPORT_RESERVED div 2 do
begin
sin.sin_port:=htons(alport);
RES:=BIND(S,SIN,SIZEOF(SIN));
if res=0 then break;
alport:=alport-1;
end;
if res<>0 then res:=wsagetlasterror;
bind_socket:=res;
end;
function get_socket(var s:tsocket;sock_type:integer):integer;
var
af,typ,procol:integer;
wsdata:twsadata;
wver:word;
res:integer;
begin
af:=PF_INET;
TYP:=sock_type;
PROCOL:=0;
wver:=makeword(1,1);
res:=wsastartup(wver,wsdata);
s:=socket(af,typ,procol);
get_socket:=res;
end;
function get_dest_addr(name:string;var sin:TSOCKADDRin;var td:taddr):integer
;
var
i,alport:integer;
st:string;
hp:phostent;
server:array[1..80] of char;
begin
fillchar(td,sizeof(td),0);
i:=sizeof(server);
fillchar(server,sizeof(server),0);
st:=name;
move(st[1],server,length(st));
hp:=gethostbyname(@server);
if hp=nil then
begin
get_dest_addr:=-1;
exit;
{halt;}
end;
move(hp^.h_addr_list^,sin.sin_addr.s_addr,hp^.h_length);
SIN.SA_FAMILY:=hp^.h_addrtype;
alport:=IPPORT_RESERVED;
sin.sin_port:=htons(alport);
sin.sin_addr.s_un_b.s_b1:=hp^.h_addr_list^[0];
sin.sin_addr.s_un_b.s_b2:=hp^.h_addr_list^[1];
sin.sin_addr.s_un_b.s_b3:=hp^.h_addr_list^[2];
sin.sin_addr.s_un_b.s_b4:=hp^.h_addr_list^[3];
move(hp^.h_addr_list^[0],td[1],4);
end;
function get_host_name:string;
var
i:integer;
hp:phostent;
server:array[1..80] of char;
begin
i:=sizeof(server);
gethostname(@server,i);
hp:=gethostbyname(@server);
get_host_name:=hp^.h_name;
end;
function get_host_addr(var sin:TSOCKADDRin;var td:taddr):integer;
var
i,alport:integer;
st:string;
hp:phostent;
server:array[1..80] of char;
begin
fillchar(td,sizeof(td),0);
i:=sizeof(server);
gethostname(@server,i);
hp:=gethostbyname(@server);
move(hp^.h_addr_list^,sin.sin_addr.s_addr,hp^.h_length);
SIN.SA_FAMILY:=hp^.h_addrtype;
alport:=IPPORT_RESERVED;
sin.sin_port:=htons(alport);
sin.sin_addr.s_un_b.s_b1:=hp^.h_addr_list^[0];
sin.sin_addr.s_un_b.s_b2:=hp^.h_addr_list^[1];
sin.sin_addr.s_un_b.s_b3:=hp^.h_addr_list^[2];
sin.sin_addr.s_un_b.s_b4:=hp^.h_addr_list^[3];
move(hp^.h_addr_list^[0],td[1],4);
end;
function get_my_addr:taddr;
VAR
s:tsocket;
RES:INTEGER;
td:taddr;
SIN:TSOCKADDRin;
begin
get_socket(gs,SOCK_dgram);
get_host_addr(sin,td);
bind_socket(gs,sin);
move(sin.sin_addr.s_addr,result,4);
{ closesocket(gs);}
{******}
end;
function connect_des(s:tsocket;name:string;var sin:TSOCKADDRin;var td:taddr)
:integer;
VAR
i,res:INTEGER;
st:string;
alport:integer;
begin
get_dest_addr(name,sin,td);
RES:=connect(S,SIN,SIZEOF(SIN));
if res=0
then
connect_des:=res
else
connect_des:=wsagetlasterror;
end;
function sendmsgto(client:string;msg:string):integer;
var
st:string;
i,res:integer;
sin:tsockaddrin;
td:taddr;
ts:tsocket;
t1:double;
buf:array[1..10] of byte;
l:integer;
begin
st:=gmy_name+':'+msg;
get_socket(ts,sock_dgram);
get_host_addr(sin,td);
bind_socket(ts,sin);
get_dest_addr(client,sin,td);
if gsend_type=all_send then
begin
st:=char(255)+st;
sin.sin_addr.s_un_b.s_b1:=char($ff);
sin.sin_addr.s_un_b.s_b2:=char($ff);
sin.sin_addr.s_un_b.s_b3:=char($ff);
sin.sin_addr.s_un_b.s_b4:=char($ff);
end
else
st:=char(0)+st;
fillchar(buf,sizeof(buf),0);
buf[1]:=1;l:=sizeof(buf);
res:=setsockopt(ts,sol_socket,SO_BROADCAST,
pchar(@buf),l);
{ repeat
setlength(st,10000);
fillchar(st[1],10000,'a');
res:=sendto(ts,st[1],length(st),0,sin,sizeof(sin));
until false;}
res:=sendto(ts,st[1],length(st),0,sin,sizeof(sin));
if res=-1 then
begin
res:=wsagetlasterror;
closesocket(ts);
halt;
end;
t1:=time;
repeat
until (time-t1)>0.000001574;
sendmsgto:=res;
closesocket(ts);
end;
function recvmsgfrom(VAR client:string;var msg:string):integer;
var
st:string;
t,i,j,res:integer;
sin:tsockaddrin;
td:taddr;
buf:array[1..10] of byte;
l:integer;
hp:phostent;
ts:tsocket;
t1:double;
begin
{ td:=get_my_addr;}
{closesocket(gs);}
{ get_my_addr;}
{ get_socket(ts,sock_dgram);}
{ get_host_addr(sin,td);
bind_socket(gs,sin);
{ get_my_addr;}
{ get_host_addr(sin,td);
bind_socket(gs,sin);}
{get_dest_addr(client,sin,td);}
closesocket(gs);
{ wsacleanup;}
td:=get_my_addr;
i:=1;j:=sizeof(sin);t:=0;
fillchar(buf,sizeof(buf),0);
buf[1]:=1;l:=sizeof(buf);
res:=setsockopt(gs,sol_socket,SO_rcvtimeo,
pchar(@buf),l);
res:=wsagetlasterror;
inc(t);
SETLENGTH(ST,3000);
{ fillchar(sin,sizeof(sin),0);}
{ WSACancelBlockingCall;}
t1:=time;
repeat
until (time-t1)>0.0000001574*5;
res:=recvfrom(gs,ST[1],3000,0,sin,j);
IF (RES<3000) AND (RES>0) THEN
BEGIN
if st[1]=char(255)
then
grecv_type:=all_send
else
grecv_type:=single_send;
SETLENGTH(ST,RES);
move(sin.sin_addr.s_addr,td,4);
{ hp:=gethostbyaddr(@td,10,pf_inet);}
CLIENT:=COPY(ST,2,POS(':',ST)-2);
st:=copy(st,pos(':',st)+1,length(st)-length(client)-1);
end;
if res=-1 then
begin
res:=wsagetlasterror;
recvmsgfrom:=res;
exit;
end;
msg:=st;
recvmsgfrom:=length(st);
end;
function check_peername(client:string):integer;
begin
check_peername:=get_dest_addr(client,gsin,gtd);
end;
begin
gtd:=get_my_addr;
gmy_name:=get_host_name;
closesocket(gs);
wsacleanup;
end.
相关文章推荐
- 用电脑怎么知道对方的ip地址
- 知道mac地址如何查看对方电脑名字
- 局域网内知道对方IP地址,如何知道其计算机名?
- 局域网中知道ip地址,如何获取对方计算机名?
- 在同一个局域网里,知道对方的IP地址,怎样才能知道她的计算机名?
- 【技术贴】同一局域网内电脑或者手机ping不通对方的解决办法
- 局域网怎么通过IP查看对方MAC,用IP反查局域网MAC地址
- 怎么查询局域网内全部电脑IP和mac地址等信息?
- 关于局域网电脑通过IP地址访问虚拟主机上的PHP WEB服务的问题
- Win7电脑ip地址怎么设置以解决网络问题
- 知道你想知道的——MSN也能显示对方IP地址
- 查看局域网内某一电脑的ip地址
- 查看局域网内某一电脑的ip地址
- 怎么给电脑设置IP地址和DNS地址,各系统设置IP/DNS几种方法
- 电脑中毒该怎么办?电脑中病毒后的处理步骤!电脑感染病毒怎么办?电脑中病毒的症状!怎么知道电脑中毒了
- 电脑“IP地址冲突”,上不了网,该怎么办
- php 二维数组 知道keyvalue 怎么得到对应的value
- linux系统,面对一大堆目录,我想找一个文件,知道文件的名字,但是不知道在哪个目录下,怎么办
- 怎么知道对方是否隐身???有几种方法??
- 知道对方IP,你该这样入侵(附:如何隐藏IP地址)