我想找出局域网中某台电脑的所有共享目录!各位有什么好办法吗?(100分)

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

jingye

Unregistered / Unconfirmed
GUEST, unregistred user!
最好是能够将加了$的目录也找出来,搜索过以往的问题,找到一个函数,在2000下不行:
procedure TfrmMain.GetShareFolder(const computername:string);//获取某一计算机上的共享目录
var
errcode,a:integer;
netres:array[0..1023] of netresource;
enumhandle:thandle;
enumentries,buffersize:dword;
s:string;
mylistitems:Tlistitems;
mylistitem:Tlistitem;
mystrings:Tstringlist;
begin
// 开始
with netres[0] do begin
dwscope :=RESOURCE_GLOBALNET;
dwtype :=RESOURCETYPE_DISK;
dwdisplaytype :=RESOURCEDISPLAYTYPE_SHARE;
dwusage :=RESOURCEUSAGE_CONTAINER;
lplocalname :=nil;
lpremotename :=pchar(computername);
lpcomment :=nil;
lpprovider :=nil;
end;
// 获取根结点
errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER,@netres[0],enumhandle);
if errcode=NO_ERROR then
begin
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
end;
wnetcloseenum(enumhandle);
a:=0;
mylistitems:=RemoteDir.Items ;
mylistitems.Clear ;
while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do
begin
with mylistitems do
begin
mylistitem:=add;
mylistitem.ImageIndex :=4;
mylistitem.Caption :=extractfilename(netres[a].lpremotename);
end;
a:=a+1;
end;
end;
//大家帮忙看看有没有更好的办法了,谢谢!
 
各位帮忙啦!
 
顺便提一个问题

加 “$”符号,隐藏的共享目录也能看到吗?
 
呵呵,正好刚刚写了这样的东西,就给你一个吧.一定可以的.
把分给我吧.

//声明查找共享资源的函数;
Function GetUserResource( UserName : string ; var List : TStringList ) : Boolean;
type
TNetResourceArray = ^TNetResource;

Var
NetResource : TNetResource;
//TNetResourceArray:Array[1..500] of TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWord;
Ind : Integer;
lphEnum : THandle;
Temp : TNetResourceArray;
Begin
Result := False;
List.Clear;
FillChar(NetResource, SizeOf(NetResource), 0); //初始化网络层次信息
NetResource.lpRemoteName := @UserName[1]; //指定计算机名称
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
//获取指定计算机的网络资源句柄
If Res <> NO_ERROR Then exit; //执行失败
While True Do //列举指定工作组的网络资源
Begin
Count := $FFFFFFFF; //不限资源数目
BufSize := 8192; //缓冲区大小设置为8K
GetMem(Buf, BufSize); //申请内存,用于获取工作组信息
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
//获取指定计算机的网络资源名称
If Res = ERROR_NO_MORE_ITEMS Then break;//资源列举完毕
If (Res <> NO_ERROR) then Exit; //执行失败
Temp := TNetResourceArray(Buf);
For Ind := 0 to Count - 1 do
Begin
List.Add(Temp^.lpRemoteName);
Inc(Temp);
End;
End;
Res := WNetCloseEnum(lphEnum); //关闭一次列举
If Res <> NO_ERROR Then exit; //执行失败
Result := True;
FreeMem(Buf);
End;
 
NetShareEnum
 
谢谢hebiziyu先,我回去试试!
 
嘿,其实我自己的和hebiziyu的都能找出共享目录,只是同样找不到隐藏的!
还有如何进入密码的共享目录(前提我有密码,非Crack也)?
 
看看这个
http://www.138soft.com/0808.rar
 
嘿<>陈经韬<>我找你的网站找了好久,总算晓得了,以前拜读过你的大帖,非常经典,真的
非常谢谢你啦!
你给的共享入侵程序可以实现查找本机的隐藏目录,其它机器的无法找出,找本机的没有什么
难度,注册表里应该有吧!
不过,人家本来就是要隐藏,想找当然不会那么容易了!
 
IP-TOOLS

这个软件可以
 
谢谢~
你上网
输入一些INTENET上面的IP段看看
谁说找不到隐藏共享?
 
上面的程序对98好象不想作用呀。
我写了一段,但好象那台98的共享也没有能列举出来,大家看看原因是什么,应该怎么改:

form1.Memo_ScanInfo.lines.add('***'+ node.Text +' NetBios 列表 ***');
resume :=0; tr := 0; er := 0;
repeat
nStatus := NetShareEnum(ipaddress,1,lpBuffer,$ffffffff, er, tr, @resume);
Shareinfo := PshareInfo1(lpbuffer);
if shareinfo<> nil then
begin
sharenode := form1.TreeView1.Items.AddChild(node,'共享资源');
sharenode.SelectedIndex:= 10;
sharenode.ImageIndex := 10;
sharenode.Expanded := true;
end;
if nstatus = NO_ERROR then
for i:=0 to er-1 do
begin
form1.Memo_ScanInfo.lines.add('共享名: '+widechartostring(shareinfo^.shi1_netname));
tempnode:= form1.TreeView1.Items.AddChild(sharenode,widechartostring(shareinfo^.shi1_netname));
tempnode.SelectedIndex:=14;
tempnode.ImageIndex :=14;
tempnode.Expanded:=true;
inc(shareinfo);
end
else
form1.Memo_ScanInfo.lines.add('列举共享资源失败');
if lpbuffer<> nil then
NetApiBufferFree(lpbuffer);
until (nstatus <> ERROR_MORE_DATA);
 
结束问题!
 
后退
顶部