知道一部机的局域网地址,如何列出其机上的共享目录?(100分)

  • 主题发起人 主题发起人 oyzter
  • 开始时间 开始时间
O

oyzter

Unregistered / Unconfirmed
GUEST, unregistred user!
用WNetOpenEnum等好像只能列出网络邻居上可用的资源?
有什么方法可以根据其IP地址而列出机上的共享目录?
我所在的是铁通宽带局域网;
网络邻居上只能列出自己宿舍的机子,
隔壁的就要用IPSCANE了!
 
试一试sss.exe.
 
sss.exe是什么来的?
请赐教!
不好意思啊!
 
不但要用WNetOpenEnum,还要结合WNetEnumResource才能得到共享资源和共享目录,不过也
只能到目录这一级了,文件列表是看不到的。
 
procedure TSearchFileThread.Execute;//线程
Var
EnumHandle : THandle;
FileRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : DWord;
Entries : DWord;
Result : Integer;
begin
mydir := mydir + #0;//mydir为工作组名时可以得到组内所有主机名
//mydir为主机名时可以得到机内所有共享文件夹名
FillChar(FileRS, SizeOf(FileRS) , 0);
With FileRS do begin
dwScope := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @mydir[1];
end;
WNetOpenEnum( RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
0,
@FileRS,
EnumHandle );
Repeat
Entries := 1;
BufSize := SizeOf(Buf);
Result := WNetEnumResource( EnumHandle,Entries,@Buf,BufSize );
If (Result = NO_ERROR) and (Entries = 1) then
begin
s:= StrPas(Buf[1].lpRemoteName); //得到网上资源名,主机或文件夹
Synchronize(AddFile); //Form1.ListBox1.Items.Add(s);
end ;
Until (Entries <> 1) or (Result <> NO_ERROR);
WNetCloseEnum( EnumHandle );
end;
如令mydir 为WorkGroup则可得到WorkGroup内所有计算机名
如令mydir 为//201 则可得到主机//201内所有共享文件夹名
 
“根据其IP地址而列出机上的共享目录”
实际上将上面代码中的mydir换成IP地址一样可以用,系统会自动转换的:)(注意要这样写:mydir := '//192.168.0.15')
我传了个例子到
http://www.playicq.com/dispdoc.php?id=1849
你可以看一下。
 
如果你用的是2000的话,可以在模拟DOS下用NET VIEW 命令。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, StdCtrls, Buttons,shellapi;

type
TNetResourceArray = ^TNetResource;//网络类型的数组
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit1: TEdit;
BitBtn1: TBitBtn;
ScrollBox1: TScrollBox;
ListBox1: TListBox;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
CheckBox1: TCheckBox;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
TrackBar1: TTrackBar;
Edit5: TEdit;
Timer1: TTimer;
StatusBar1: TStatusBar;
Image1: TImage;
Label7: TLabel;
procedure TrackBar1Change(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Label7Click(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label7MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);//禁止窗口改变大小
message WM_GETMINMAXINFO;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); //enable change form size
begin
inherited;
with Msg.MinMaxInfo^ do begin
ptMinTrackSize.x:= Form1.width;
ptMaxTrackSize.x:= Form1.width;
ptMinTrackSize.y:= Form1.height;
ptMaxTrackSize.y:= Form1.height;
end;
end;

Function GetUserResource( UserName : string ) : Boolean;
Var
NetResource:TNetResource;
Buf:Pointer;
Count,BufSize,Res:DWord;
Ind : Integer;
lphEnum : THandle;
Temp : TNetResourceArray;
Begin
Result := False;
FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
NetResource.lpRemoteName := @UserName[1];//指定计算机名称
//获取指定计算机的网络资源句柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
If Res <> NO_ERROR Then
begin
exit;//执行失败
end;
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
//获取指定计算机中的共享资源名称,+2表示删除"//",
form1.ListBox1.Items.Add(string(Temp^.lpRemoteName +2));
Inc(Temp);
End;
End;
Res := WNetCloseEnum(lphEnum);//关闭一次列举
If Res <> NO_ERROR Then
begin
exit;//执行失败
end;
Result := True;
FreeMem(Buf);
End;

{$R *.dfm}

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
timer1.Interval:=trackbar1.Position*1000;
edit5.Text:=inttostr(trackbar1.Position);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
listbox1.Clear;
if not checkbox1.Checked then
begin
statusbar1.Panels[0].Text:='检测中.....';
if GetUserResource('//'+edit1.Text) then listbox1.Items.Add('找到共享资源');
statusbar1.Panels[0].Text:='检测完毕!!';
end
else
begin
statusbar1.Panels[0].Text:='稍候.....';
statusbar1.Update;
timer1.Enabled:=true;
end;
// listbox1.SetFocus;
listbox1.itemindex:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=false;
statusbar1.Panels[0].Text:='被用户强制停止';
statusbar1.Update;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
case Wnetcancelconnection('X:',False) of
0:statusbar1.Panels[0].Text:='成功断开';
50:statusbar1.Panels[0].Text:='函数不被支持';
8: statusbar1.Panels[0].Text:='系统内存不足';
59:statusbar1.Panels[0].Text:='网络发生错误';
487:statusbar1.Panels[0].Text:='无效指针';
87:statusbar1.Panels[0].Text:='无效网络名';
2250: statusbar1.Panels[0].Text:='无须断开的连接';
2401:statusbar1.Panels[0].Text:='断开的连接有打开的文件';
else
statusbar1.Panels[0].Text:='连接错误';
end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
path_lsq:pchar;
begin
if ListBox1.Items.Count=0 then
application.MessageBox('共享资源中没有网络路径或是没有选中!!','玩命的警告',MB_ok+MB_Iconstop) else
begin
case Wnetcancelconnection('X:',False) of
0:statusbar1.Panels[0].Text:='成功断开';
50:statusbar1.Panels[0].Text:='函数不被支持';
8: statusbar1.Panels[0].Text:='系统内存不足';
59:statusbar1.Panels[0].Text:='网络发生错误';
487:statusbar1.Panels[0].Text:='无效指针';
87:statusbar1.Panels[0].Text:='无效网络名';
2250: statusbar1.Panels[0].Text:='无须断开的连接';
2401:statusbar1.Panels[0].Text:='断开的连接有打开的文件';
else
statusbar1.Panels[0].Text:='连接错误';
end;
case Wnetaddconnection(pchar('//'+listbox1.Items.Strings[listbox1.ItemIndex]),'111','X:') of
0:
begin
statusbar1.Panels[0].Text:='成功入侵,请察看你的资源管理器';
path_lsq:= pchar('explorer '+('//'+listbox1.Items.Strings[listbox1.ItemIndex]));
Winexec(path_lsq,SW_Show);
end;
50: statusbar1.Panels[0].Text:= '函数不被支持';
8: statusbar1.Panels[0].Text:='系统内存不足 ';
59: statusbar1.Panels[0].Text:='网络发生错误 ';
487: statusbar1.Panels[0].Text:='无效指针';
67: statusbar1.Panels[0].Text:='无效网络名';
1200:statusbar1.Panels[0].Text:='无效本地名';
85: statusbar1.Panels[0].Text:= '此连接已经建立,清先断开';
86:statusbar1.Panels[0].Text:='无效口令';
5:statusbar1.Panels[0].Text:='访问被拒绝';
else
statusbar1.Panels[0].Text:= '连接错误';
end;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
begin
statusbar1.Panels[0].Text:='正在检测网段.....';
statusbar1.Update;
if GetUserResource('//'+edit2.Text+'.'+edit3.Text) then
begin
listbox1.Items.Add('找到共享资源');
timer1.Enabled:=false;
end;
if edit3.Text=edit4.Text then
begin
statusbar1.Panels[0].Text:='检测完毕';
statusbar1.Update;
timer1.Enabled:=false;
end;
edit3.Text:=inttostr(strtoint(edit3.Text)+1);
edit3.Update;
end;
end;
procedure TForm1.Label7Click(Sender: TObject);
begin
shellexecute(handle,'open',pchar('http://10.231.52.10'),nil,nil,sW_shownormal);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label7.Font.Color:=rgb(0,0,0);
end;

procedure TForm1.Label7MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label7.Font.Color:=rgb(0,0,255);
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked then
begin
edit2.Enabled:=true;
edit3.Enabled:=true;
edit4.Enabled:=true;
edit1.Enabled:=false;
end
else
begin
edit2.Enabled:=false;
edit3.Enabled:=false;
edit4.Enabled:=false;
edit1.Enabled:=true;
end;
end;

end.
 
sss.exe是俄罗斯人写的一个扫描程序。可以查漏洞,端口,用户,密码,共享资源,数据库等等。
是hacker常用工具之一。网上有很多下载的,搜索一下:
sss.zip 下载
有很多。有汉化版的。
 
NetShareEnum最好了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
568
import
I
后退
顶部