PDA

View Full Version : Server log ta như thế nào nhỉ ?



bdkhoi296
14-09-2002, 15:58
Thu nhận thông tin của người truy cập

Cho dù có thể sử dụng một công cụ có sẵn của bộ Microsoft Windows NT Server 4.0 Resource Kit’s là Winexit để người dùng rời khỏi hệ thống mỗi khi cần, nhưng ứng dụng này có hai điểm bất tiện. Đầu tiên, nếu người dùng đăng nhập vào hệ thống trong một thời giai dài mà “không làm gì cả” thì ứng dụng này sẽ tự động ngắt người dùng ra khỏi hệ thống. Thứ hai, ứng dụng này cũng không thể ghi lại được những tài liệu được mở trước khi người dùng thoát khỏi hệ thống.
Vì vậy vấn đề được đặt ra là phải làm cho các nhà quản trị có thể thực hiện nhiệm vụ của họ dễ dàng hơn. Điều này có thể thực hiện được bằng một ứng dụng script nhỏ có khả năng nhận dạng được bất cứ máy chủ nào đăng làm việc, script này sẽ ghi lại các kết quả ra một file, gọi là LoggedOnUser.bat.
LoggedOnUser.bat sử dụng tiện ích PsLoggedOn, tiện ích này là một phần trong một sản phẩm miễn phí là PsTools của hãng Sysinternals ( ). PsLoggedOn làm việc thích hợp hơn so với các dòng lệnh của Nbtsat và ghi lại toàn bộ các thông tin của người dùng truy cập như : ngày giờ truy cập, địa điểm ...
Cũng như các ứng dụng khác, PsTools được thiết kể để sử dụng dưới dạng cửa sổ lệnh (command shell windows). Trước đây khi chưa dùng ứng dụng này nên tôi phải tự quyết định không biết nó thi hành và kết quả được ghi ra có thể sử dụng bằng một script được không ?. Bạn có thể tự mình quyết định điều này với tất cả các ứng dụng bằng các bước sau :

1. Đọc những hướng dẫn sử dụng hoặc chạy ứng dụng đó với thuật ngữ Help (ví dụ : -H) để biết cách sử dụng các cú pháp riêng của chương trình. Một vài ứng dụng cho phép chạy ngay phần Help khi bạn chạy chúng mà không có cú pháp nào cả.
2. Bằng một dòng lệnh, hãy thử chương trình với các cú pháp khác nhau qua các đường dẫn và dữ liệu chính xác. Bằng cách này bạn có thể làm quen với cách đánh cú pháp và hiểu được chương trình thi hành ra sao, sau đó hãy xem “đầu ra” như thế nào. (Nếu bạn ó ý định dùng script cho “đầu ra” của ứng dụng, bạn phải biết nó như thế nào và hãy thử suy nghĩ xem script có thể điều khiển các dòng lệnh được không ?)
3. Cũng với dòng lệnh, hãy thử xem chương trình thông báo ra sao khi nhập sai đường dẫn hay cú pháp. Với cách này bạn có thể tìm được cách mà chương trinh đưa ra cá thông báo lỗi, và hơn nữa nó cũng giúp ta làm quen với các thông báo lỗi.

Sau khi thi hành các bước trên, bạn sẽ biết mình có thể sử dụng chương trình bằng script hay không và làm thế nào để dùng chúng. áp dụng các bước trên với PsLoggedOn, tôi phát hiện ra rằng tôi có thể “nhúng” một lệnh “ping” và một máy đếm “counter” vào LoggedOnUser.bat.
Nhúng vào lệnh ping
Khi tôi thử nghiệm PsLoggedOn.bat đối với một máy chủ ngoại tuyến và một máy chủ “ảo”, tôi thấy rằng ứng dụng này sẽ giữ sự kết nối tới máy chủ đến 1 phút trước khi quá trình kết thúc và ứng dụng cho ra một thông báo lỗi. Có 1 phút trễ đó không là một vẫn đề nếu bạn sử dụng ứng dụng này trên một máy chủ. Tuy nhiên, nếu bạn dùng nó để chạy trên nhiều máy chủ thì 1 phút trễ đó sẽ là một vấn đề nếu một vài máy chủ đang ngoại tuyến.
Để loại trừ các khả năng gây ra lỗi, thì script LoggedOnUser.bat sẽ ping mỗi máy chủ trước khi chạy, nếu máy chủ không trả lời thì script sẽ đóng máy chủ này lại trong đanh sách máy chủ.

Nhúng máy đếm
Khi thử nghiệm PsLoggedOn.bat tôi để ý rằng “đầu ra” của script sẽ liên tục được cuộn trên màn hình, sẽ làm cho người dùng rất khó theo dõi. Vì vậy, tôi quyết định sử dụng một máy đếm để giới hạn số dòng được hiện thị ra trên màn hình (có thể điều khiển được). Máy đếm rất tiện để điều khiển và tiện dùng hơn nữa ta sẽ làm hai máy đếm. Cái thứ nhất sẽ đếm số máy chủ đang làm việc được hiển thị trên cửa sổ lệnh và một máy đếm khác sẽ là ngưng script khi cửa sổ lệnh này hiển thị số lượng máy chủ làm việc mà ta có thể định trước.

Mã nguồn của LoggedOnUser.bat

@ECHO OFF
@TITLE LoggedInUser Script
@COLOR 1F
@IF NOT "%OS%"=="Windows_NT" GOTO :ERROROS
GOTO GIN

:: Chỉnh đường dẫn của ứng dụng PsLoggedOn.
SET PsLoggedOnLocation=\\AdminServer\utilities\pslogge

don.exe
:: Chỉnh đường dẫn của file input.
SET ServersFileLocation=\\AdminServer\utilities\server

s.txt
:: Chỉnh đường dẫn của file log.
SET LogFileLocation=\\AdminServer\utilities\logfile.tx t
:: Chỉnh số máy chủ được hiện thị ra cửa sổ lệnh.
SET repeatX=10
:: Xóa file log cũ.
IF exist "%LogFileLocation%" del "%LogFileLocation%"
:: Chỉnh cả hai máy đếm về 0
SET counter=0
SET countertotal=0
:: Phân tích danh sách máy chủ
FOR /F %%i in (%ServersFileLocation%) do (SET server=%%i) & (call :tryit)

GOTO :EOF

:: Ping máy chủ
:tryit

:: Xoá các trả lời của ping trước.
SET response=
:: Ping đến máy chủ nếu nó đang làm việc.
FOR /F "tokens=1" %%i in ('PING -n 1 %server%^| find "Reply"') DO (SET response=%%i)
:: Nếu máy chủ bận thì bỏ qua.
IF DEFINED response (goto :Getuser) & (GOTO :next)
:: Tăng bộ đếm
SET /A countertotal+=1
SET /A counter+=1
:: Ghi kết quả ra màn hình và log file.
ECHO (%countertotal%) %server% not available!
ECHO (%countertotal%) %server% not available!>>"%LogFileLocation%"
:: Điều chỉnh máy đếm về 0.
IF %counter% EQU %repeatX% (SET counter=0) & (pause)
:next

GOTO :EOF

:Getuser
:: Dùng ứng dụng PsLoggedOn để theo dõi nếu có ai truy cập vào.
FOR /F "tokens=*" %%i in ('%PsLoggedOnLocation% -l \\%server% ^| find "/"') DO (SET User=%%i) & (CALL :Setcounter)

GOTO :EOF

:Setcounter
:: Tăng bộ đếm
SET /A countertotal+=1
SET /A counter+=1
:: Ghi kết quả ra màn hình và log file.
ECHO (%countertotal%) %server% %User%
ECHO (%countertotal%) %server% %User%>>"%LogFileLocation%"
:: Điều chỉnh máy đếm về 0 và ngưng chương trình
IF %counter% EQU %repeatX% (SET counter=0) & (pause)

GOTO :EOF
:: Nếu hệ điều hành không là WindowsNT hay Windows2k thì báo lỗi.
:ERROROS
ECHO
PAUSE
CLS

Source : NVH(c)