如何模拟输入用户名、密码来访问网络邻居

主宰稳场 提交于 2020-02-29 05:54:28

如何模拟输入用户名、密码来访问网络邻居 
 
基本原理

    在Windows 环境下,应用程序使用Windows 网络函数(WNet)来实现网络功能
 而不用关心网络的供应商及具体实现,因为WNet 函数是独立于网络的。
----Wnet 函数主要有:
    WnetAddConnection ,
 WnetAddConnection2 ,
 WnetAddConnection3 ,
    WnetCancelConnection2 等。
 
 本文主要用 WnetAddConnection2,WnetCancelConnection2 函数。

    WNetAddConnection2 在Windows.pas 中的函数原型如下:

    function WNetAddConnection2(var lpNetResource: TNetResource;lpPassword, lpUserName:
        PChar; dwFlags: DWORD): DWORD; stdcall;

    为调用此函数,必须填写lpNetResouce 结构,此结构的定义为:

typedef  struct _NETRESOUCE{
    DWORD dwScope; 
    DWORD dwType; 
    DWORD dwDisplayType;
    DWORD dwUsage;
    LPTSTR lpLocalName;
    LPTSR  lpRemoteName;
    LPTSr  lpProvider;
} NETRESOURCE;

   这里使用dwType,lpLocalName,lpRemoteName,lpProvider 几个参数。其含义如下:

   dwType : 用于指定网络的资源类型,有以下RESOURCETYPE_ANY( 任何资源),
RESOURCETYPE_DISK( 磁盘资源) , RESOURCETYPE_PRINT(打印机资源)。

----lpLocalName : 指定本地设备。

----lpRemoteName : 指定远程网络名。

----lpProvider : 指定提供网络资源的供应商。如为空,则表示供应商未知。

----WNetAddConnection2 函数的lpPassword 为远程资源的口令。

----lpUserName 为远程资源的用户名。dwFlags 标志位用于指定登录时是否
重新连接(0 时表示不重新连接,CCONNECT_UPDATE_PROFILE 表示登录时重新连接)。

----WnetCancelConnection2 在Windows .pas 中的函数原型如下:

----function WNetCancelConnection2(lpName: PChar;   dwFlags: DWORD; fForce: BOOL):DWORD; stdcall;

----lpName : 要断开的远程网络资源或本地重定向驱动器。

----dwFlags : 含义同上。

----fForce : True 表示不管是否有文件打开,强制性断开网络驱动器;
False 表示如有文件打开则函数运行失败。

实例

----在Delphi 的File 菜单下选择New Application,在Form1 上放置一个Button,
在Button1 的Click 事件中键入如下代码:
procedure TForm1.Button1Click(Sender : TObject);
var
  NetSource : TNetResource;
begin
  with NetSource do
  begin
    dwType := RESOURCETYPE_ANY;
    lpLocalName := ‘X:';
    // 将远程资源映射到此驱动器
    lpRemoteName := ‘//hqServer/sys';
    // 远程网络资源
    lpProvider := ‘'; 
    // 必须赋值,
      如为空则使用lpRemoteName 的值。
  end;
  WnetAddConnection2(NetSource,‘Password',‘Guest',
   // 用户名为Guest,口令为Password
  CONNECT_UPDATE_PROFILE);
   // 下次登录时重新连接
  // 此时在Windows 资源管理器中
    可看到网络驱动器X:
  if MessageDlg(‘Are you sure to disconnect Drive ?',
   mtConfirmation, [mbYes, mbNo], 0) = mrYes
  then     
    // 不管是否有文件打开,
      断开网络驱动器X:
 WNetCancelConnection2( ‘X:', CONNECT_UPDATE_
PROFILE, True); 
end;
end;
============================================================================================
 
 
 
 
localname:本地磁盘号 如:Y: Z:
remotename: 共享路径 如 ://server/share
username : 用户名
password: 密码
function connectserver(localname: string; remotename: string; username: string; password: string): boolean;
var
 NetSource: TNetResource; Errinfo: longint;
begin
 with NetSource do begin
    dwType := RESOURCETYPE_ANY; //RESOURCETYPE_DISK
    lpLocalName := pchar(localname);
         // 将远程资源映射到此驱动器
    lpRemoteName := pchar(remotename);
        // 远程网络资 源
    lpProvider := '';
        // 必须赋值,如为空则使用lpRemoteName 的值。
 end;
 ErrInfo := WnetAddConnection2(NetSource, pchar(password), pchar(username), 0);
 result := (ErrInfo = NO_ERROR);
end;
 
 
 
问题:【求助】局域网中如何通过网络共享实现文件传输? ( 积分:50, 回复:7, 阅读:146 )
分类:数据库-C/S型 ( 版主:qince, luyear ) 
来自:秋伊水, 时间:2003-4-23 21:34:00, ID:1796728 [显示:小字体 | 大字体] 
局域网服务器上面有共享目录share用户aaa可以通过网络共享在share中添加文件,如何
用delphi实现向服务器share目录上传文件!

假定aaa用户的帐户和密码都是aaa 
 
来自:秋伊水, 时间:2003-4-23 22:00:00, ID:1796785
uses shellapi;
copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);

这个好像可以我刚才试过了!不过如果网络共享要登陆怎么写啊???? 
 
来自:stuwei, 时间:2003-4-23 22:03:00, ID:1796790
参考WNetAddConnection函数
 
来自:秋伊水, 时间:2003-4-23 22:06:00, ID:1796794
能具体举个例子吗?谢谢了!!! 
 
来自:秋伊水, 时间:2003-4-24 10:48:00, ID:1797735
ding 
 
来自:shiningplus, 时间:2003-4-24 12:35:00, ID:1798311
    WinExec(
      PChar(Format('net use//%s/ipc$ "%s" /user: "%s" ',
      [Edtserver.Text,
      EdtPassword.Text,
        EdtUserName.Text])),
        0
      ); 
 
 
 
COPY文件的问题
问题:COPY文件的问题 ( 积分:100, 回复:11, 阅读:229 )
分类:Windows API ( 版主:amo, cAkk ) 
来自:折翅飞翔, 时间:2003-2-11 12:21:00, ID:1615211 [显示:小字体 | 大字体] 
我想用DELPHI做一个COPY文件的程序,程序要求从指定的机器中COPY某几个文件到另一台机器中,程序运行在一台有双网卡的机器上,利用网卡A到A机器COPY文件,再利用本机网卡B,COPY到B机器中,每次间隔由手工制定,程序可以自动计算出每分钟COPY的速度。
>请教的问题:1、怎样实现COPY功能?
>           2、计算每分钟COPY的速度怎样实现?
>           3、如果某个网卡连接的机器出现网络堵塞(1分钟不能COPY成功),能及时报警,请问怎样判断是那块网卡出现的堵塞?
 
来自:张无忌, 时间:2003-2-11 12:23:00, ID:1615214
1,2很容易用CopyFileEx()
3,就麻烦了,知道哪个网卡出问题太麻烦,如果真要知道,那就自己
用SOCKET写个简单的程序,就可以解决以上3个问题
 
来自:lcl_003, 时间:2003-2-11 12:27:00, ID:1615220
前几天刚好写了个互相考文件的东西
 WNetAddConnection('//192.168.0.60/chan','','192.168.0.20');
 copyfile(PChar(filepath+'chan/'+sendfile),PChar('//192.168.0.60/chan/'+sendfile),false);
 label1.Caption:='与监控端连接成功!';
 button1.Caption:='关闭'; 
 
来自:折翅飞翔, 时间:2003-2-11 12:38:00, ID:1615235
请问CopyFileEx()怎样使用呀?怎样COPY,怎样计算COPY速度?
 
 
来自:张无忌, 时间:2003-2-11 12:38:00, ID:1615238
你不会看看帮助,DELPHI的WIN32 SDK帮助里就有
 
来自:唐佐平, 时间:2003-2-11 13:31:00, ID:1615380
关注!
 
来自:折翅飞翔, 时间:2003-2-12 12:26:00, ID:1617328
我查了一下CopyFileEx()好象都是BCB中使用的没有在DELPHI中使用过呀
 
来自:copy_paste, 时间:2003-2-12 12:48:00, ID:1617362
function CopyProgress(FileSize, Transferred: Int64;
  StreamSize, StreamTransferred: Int64;
  StreamNumber, CallbackReason: DWORD;
  SourceFile, DestFile: THandle; Data: Pointer): DWORD; stdcall;
var
  Form: TForm1;
begin
  Form := Data;
  Form.ProgressBar1.Max := FileSize;
  Form.ProgressBar1.Position := Transferred;
  Result := PROGRESS_CONTINUE;
  Application.ProcessMessages;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyFileEx('ExistsFile.ext', 'newFile', @CopyProgress,
    Self, nil, COPY_FILE_FAIL_IF_EXISTS);
end; 
 
来自:春意, 时间:2003-2-12 13:23:00, ID:1617433
s: String;
begin
    s := 'c:/ycy.exe';
    copyfile(pchar(Application.ExeName),pchar(s),true);
    ShowMessage('成功');
end; 
 
来自:折翅飞翔, 时间:2003-2-12 13:31:00, ID:1617456
to :春意
你的这个文件COPY到什么地方去了?
 
来自:lvxq, 时间:2003-2-13 13:09:00, ID:1619332
利用copyfile命令我想控制会麻烦一点吧,尤其在时间计算方面。在
许多时候,我觉得用读写文件的方式会比较好
example
  
var
  buf:array [0..1024*5] of char;   // Get 5 K bytes in one time
  Han1,Han2:Integer;
  lRead,lRSize,lWrite,lWSize:DWORD;
  i:Integer;
  bufSize:DWORD;
begin
  bufSize:=5*1024;
  Label1.caption:=DateTimeToStr(now);
  Application.ProcessMessages ;
  Han1:=FileOpen(源文件,fmOpenRead);
  if Han1<0 then
      exit;  //文件打开失败
  Han2:=FileCreate(目标文件) ;
    // 目标文件可以是 //ComputerName/共享名/路径/文件名
  if Han2<0 then
      exit;  //文件创建失败;

   lRSize:=FileSeek(han1,0,2);  // 返回源文件大小_字节数
   lWSize:=0;
   FileSeek(han1,0,0);         // 回到文件头,准备读
   for i:=1 to (lRsize div bufsize)+1 do
       begin
                lRead:=FileRead(han1,buf,bufSize);    //读指定大小的内容
                if lRead<1024 then
                   begin
                     lWrite:=FileWrite(Han2,buf,lRead);  
                         // 小于指定大小,意味着文件坏,或者到文件尾
                     lWSize:=lWSize+lRead;  //累计写入的字节数,你可以与源
                               //文件大小比较
                     break;
                   end
                else
                   begin
                    lWrite:=FileWrite(Han2,buf,bufSize);
                    lWSize:=lWSize+bufSize;
                   end;

       end;
    FileClose(Han1); //关闭源文件
    FileClose(Han2); // 关闭目标文件
  Label2.caption:=DateTimeToStr(now);
  Application.ProcessMessages ;
 
如果文件尺寸大,你就可以发现这个时间差了,当然你可以用更精确的计时
甚至比较到底有没有写成功,。。。。应该能判断你的要求。


 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!