如何抓取 NT/WIN2000 上的使用者名單 |
答題得分者是:chiehmin
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
type USER_INFO_0=packed record
usri0_name:PWideChar;
end; type PUSER_INFO_0=^USER_INFO_0;
..
..
..
..
function NetUserEnum(ServerName:PWideChar;Level:DWORD;Filter:DWORD;var Buf:Pointer;PrefMaxLen:DWORD;
var EntriesRead:PDWord;var TotalEntries:PDWord;var ResumeHandle:PDWord):Longint;stdcall;external 'netapi32.dll' Name 'NetUserEnum';
..
..
..
..
function getUsersName(ServerName: String): String;
var
Ptr:Pointer;
Total:PDWord;
Count:PDWord;
Resume:PDWord;
Info:PUSER_INFO_0;
I:Integer;
FD:Array[0..255] Of WideChar;
begin
Result := ''; FError := 0;
Resume := nil;
StringToWideChar(sname, FD, SizeOf(FD));
NetUserEnum(FD, 0, 0, Ptr, 0, Count, Total, Resume);
FError := NetUserEnum(FD, 0, 0, Ptr, 256 * Integer(Total), Count, Total, Resume);
If FError = 0 Then
Begin
Info := PUSER_INFO_0(Ptr);
For I := 1 To DWord(Count) Do
Begin
Result := Result Info.usri0_name ', ';
Inc(Info);
End;
End;
end;
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
把 _USER_INFO_0 改成 _USER_INFO_3 typedef struct _USER_INFO_3 {
LPWSTR usri3_name;
LPWSTR usri3_password;
DWORD usri3_password_age;
DWORD usri3_priv;
LPWSTR usri3_home_dir;
LPWSTR usri3_comment;
DWORD usri3_flags;
LPWSTR usri3_script_path;
DWORD usri3_auth_flags;
LPWSTR usri3_full_name;
LPWSTR usri3_usr_comment;
LPWSTR usri3_parms;
LPWSTR usri3_workstations;
DWORD usri3_last_logon;
DWORD usri3_last_logoff;
DWORD usri3_acct_expires;
DWORD usri3_max_storage;
DWORD usri3_units_per_week;
PBYTE usri3_logon_hours;
DWORD usri3_bad_pw_count;
DWORD usri3_num_logons;
LPWSTR usri3_logon_server;
DWORD usri3_country_code;
DWORD usri3_code_page;
DWORD usri3_user_id;
DWORD usri3_primary_group_id;
LPWSTR usri3_profile;
LPWSTR usri3_home_dir_drive;
DWORD usri3_password_expired;
}USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3; 將上述依樣宣告成Delphi的型式..再把程式裡相關的地方都改成相對應就應該就可以了..
引言: 抱歉,我已知道怎麼執行了,但是我想抓詳細的資訊要如何做呢? |
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
type USER_INFO_3=packed record
usri3_name: PWideChar;
usri3_password: PWideChar;
usri3_password_age: PDWord;
usri3_priv: PDWord;
usri3_home_dir: PWideChar;
usri3_comment: PWideChar;
usri3_flags: PDWord;
usri3_script_path: PWideChar;
usri3_auth_flags: PDWord;
usri3_full_name: PWideChar;
usri3_usr_comment: PWideChar;
usri3_parms: PWideChar;
usri3_workstations: PWideChar;
usri3_last_logon: PDWord;
usri3_last_logoff: PDWord;
usri3_acct_expires: PDWord;
usri3_max_storage: PDWord;
usri3_units_per_week: PDWord;
usri3_logon_hours: PByte;
usri3_bad_pw_count: PDWord;
usri3_num_logons: PDWord;
usri3_logon_server: PWideChar;
usri3_country_code: PDWord;
usri3_code_page: PDWord;
usri3_user_id: PDWord;
usri3_primary_group_id: PDWord;
usri3_profile: PWideChar;
usri3_home_dir_drive: PWideChar;
usri3_password_expired: PDWord;
end; type PUSER_INFO_3=^USER_INFO_3;
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
紅字部份別忘了改~~~ function getUsersName(ServerName: String): String;
var
Ptr:Pointer;
Total:PDWord;
Count:PDWord;
Resume:PDWord;
Info:PUSER_INFO_3;
I:Integer;
FD:Array[0..255] Of WideChar;
begin
Result := ''; FError := 0;
Resume := nil;
StringToWideChar(ServerName, FD, SizeOf(FD));
NetUserEnum(FD, 3, 0, Ptr, 0, Count, Total, Resume);
FError := NetUserEnum(FD, 3, 0, Ptr, 256 * Integer(Total), Count, Total, Resume);
If FError = 0 Then
Begin
Info := PUSER_INFO_3(Ptr);
For I := 1 To DWord(Count) Do
Begin
Result := Result Info.usri3_name ', ';
Inc(Info);
End;
End;
end;
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
真抱歉,還是不行,我將我的程式碼貼上來請您看一下,那裡錯了,謝謝! unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} type USER_INFO_3 = packed record
usri3_name : PWideChar;
usri3_password : PWideChar;
usri3_password_age: PDWord;
usri3_priv: PDWord;
usri3_home_dir: PWideChar;
usri3_comment: PWideChar;
usri3_flags: PDWord;
usri3_script_path: PWideChar;
usri3_auth_flags: PDWord;
usri3_full_name: PWideChar;
usri3_usr_comment: PWideChar;
usri3_parms: PWideChar;
usri3_workstations: PWideChar;
usri3_last_logon: PDWord;
usri3_last_logoff: PDWord;
usri3_acct_expires: PDWord;
usri3_max_storage: PDWord;
usri3_units_per_week: PDWord;
usri3_logon_hours: PByte;
usri3_bad_pw_count: PDWord;
usri3_num_logons: PDWord;
usri3_logon_server: PWideChar;
usri3_country_code: PDWord;
usri3_code_page: PDWord;
usri3_user_id: PDWord;
usri3_primary_group_id: PDWord;
usri3_profile: PWideChar;
usri3_home_dir_drive: PWideChar;
usri3_password_expired: PDWord;
end; type PUSER_INFO_3 = ^USER_INFO_3; function NetUserEnum(ServerName:PWideChar;Level:DWORD;Filter:DWORD;var Buf:Pointer;PrefMaxLen:DWORD;
var EntriesRead:PDWord;var TotalEntries:PDWord;var ResumeHandle:PDWord):Longint;stdcall;external 'netapi32.dll' Name 'NetUserEnum'; function getUsersName(ServerName: String): String;
var
Ptr:Pointer;
Total:PDWord;
Count:PDWord;
Resume:PDWord;
Info:PUSER_INFO_3;
I,FError:Integer;
FD:Array[0..255] Of WideChar; begin
FError := 0;
Resume := nil;
StringToWideChar(ServerName, FD, SizeOf(FD));
NetUserEnum(FD, 3, 0, Ptr, 0, Count, Total, Resume);
FError := NetUserEnum(FD, 3, 0, Ptr, 256 * Integer(Total), Count, Total, Resume);
If FError = 0 Then
Begin
Info := PUSER_INFO_3(Ptr);
For I := 1 To DWord(Count) Do
Begin
Result := Result Info.usri3_name ',' Info.usri3_password;
Inc(Info);
End;
End;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
getUsersName('IBM'); end; end.
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
我沒辦法囉..在我這邊我抓每一台電腦都能順利成功..
看看還有沒有其它高手知道你的問題是為什麼囉..... NERR_Success 0 No errors encountered.
ERROR_ACCESS_DENIED 5 The user has insufficient
privilege for this opera-
tion.
ERROR_NOT_SUPPORTED 50 This network request is
not supported.
ERROR_BAD_NETPATH 53 The network path was not
found.
ERROR_NETWORK_ACCESS_DENIED 65 Network access is denied.
ERROR_INVALID_LEVEL 124 Invalid level parameter.
ERROR_MORE_DATA 234 More data available,
buffer too small.
NERR_RemoteOnly 2106 This operation can be
performed only on a
server.
NERR_WkstaNotStarted 2138 The Workstation service
is not started.
NERR_BadTransactConfig 2141 The server is not config-
ured for this transac-
tion; IPC$ is not
shared.
NERR_InvalidDatabase 2247 The user accounts data-
base file is corrupted.
NERR_InvalidComputer 2351 Invalid computername
specified.
引言: 我有試過傳入一個電腦名稱,但是它的 FERROR= 2351,所以傳回空值發表人 - chiehmin 於 2002/10/17 18:04:09 |
gavinj123
初階會員 發表:88 回覆:48 積分:27 註冊:2002-10-15 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
chiehmin
高階會員 發表:13 回覆:134 積分:134 註冊:2002-05-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |