2006년 2월 26일 일요일

URL Rewrite Filter for IIS (ISAPI Filter)

URL Rewrite 는 IIS 웹서버에 요청된 웹페이지 특정 주소 형식에 대해서, 지정된 웹페이지 내용을 출력해 주는 ISAPI 필터 입니다.

IIS6 에서는 ISAPI 필터가 아니더라도, .NET의 HttpHandler 를 통해서 어느정도 효과를 보실수 있습니다.

"ASP.NET HTTP 모듈 및 HTTP 처리기 개요" kb 문서를 참고해 보세요.


Mod_Rewrite 의 설치 방법은 아주 간단합니다.

http://www.iismods.com/ 의 다운로드 페이지에서 다운로드후 압축을 풀면 다음과 같습니다.

- The IIS ISAPI filter (Mod_Rewrite.dll)
- The config file (mod_rewrite.ini)
- This Documentation (document.htm)
- The test file mod_rewrite.htm.



적용코자하는 웹사이트의 IIS 등록정보에서 ISAPI 부분에 필터를 등록해 줍니다. ISAPI 모듈이 올라올려면 IIS를 재시작 해야 합니다.

mod_rewrite.ini 의 기본 포맷은 다음과 같습니다.

(RewriteRule)(SPACE)(RegularExpression to match Input URL)(SPACE)(Output URL Expression)(SPACE)([options])


예제 몇가지를 보면, 아주 요긴한 기능을 제공합니다.

RewriteRule ^/product/(.*).htm /product.asp?id=$1

/product/ 디렉토리의 *.htm 파일을 요청할 경우 /product.asp?id= 에 $1 값의 asp 페이지를 출력해 준다는 예제입니다.


RewriteCond HTTP_HOST (.*)\.yourdomain\.com
RewriteRule (.*) /default.asp?site=$C&loc=$1

이 경우는 aaa.serverinfo.pe.kr 을 요청한 경우 /default.asp?site=$C&loc=$1 의 페이지를 출력. 회원마다 회원id 형태의 서브도메인 형태의 웹사이트 운영이 필요한 경우 아주 요긴할것 같습니다.


RewriteCond HTTP_REFERER theirsite.com [OR]
RewriteCond HTTP_REFERER thersite1.com 
RewriteRule .zip /denied.htm

이 경우는, 일반 파일이나, 이미지 파일등을 직접 다운로드를 막는 설정입니다. zip 압축파일을 다운로드 요청할 경우 denided.htm 를 클라이언트에 출력합니다. 경고문구 내용이 있으면 좋겠죠..


좀더 확장된 예제는 다음 페이지를 참고해 보시기 바랍니다.
http://www.iismods.com/url-rewrite/examples.htm


2006년 2월 25일 토요일

SQL 데이터열 암호화를 위한 xp_crypt 확장 프로시져

이미 DB를 다루는 분들중에는 이용하고 계시는 XP_CRYPT
MSSQL 자체에서 제공하지 않는 데이터열 암호화를 제공하는 확장 프로시져 모듈 입니다.
(*MySQL은 자체 모듈로 이미 제공하고 있는 상태입니다.)

모듈은 다음 사이트에서 다운로드가 가능합니다.
http://www.activecrypt.com/downloads.html

SQL Server 2005 및 Oracle 은 윈도우 및 리눅스용 까지 제공하고 있습니다.


사용법은 간단합니다. 위 모듈을 다운로드 받은다음, dll 파일을 다음 경로에 복사해 넣습니다.

C:\Program Files\Microsoft SQL Server\MSSQL\Binn


그런다음, SQL서버에 등록을 해주면 됩니다. 다음 쿼리문이 아니더라도 EM 또는 SMS 같은 GUI 도구를 이용해서도 쉽게 등록이 가능합니다.

 use master
 go
 sp_addextendedproc 'xp_crypt', 'xp_crypt.dll'
 go


프로시져에 대한 자세한 사용법은 다음 문서를 참고하시면 됩니다.
http://www.activecrypt.com/tutor2.html

사용법은 그리 복잡하지 않습니다. 키를 생성해야 하고, 그 키 값을 이용한 함수를 만든 다음에야,  그 함수를 통해서 암화화 가 가능해 집니다.

일단, 꼭 필요한 데이터열만 암호화를 해야 합니다. 암호화를 통한 비용 손실도 고려를 해야 하기 때문입니다. XP_CRYPT 의 성능 비교에 관련된 글도 참고를 해보시기 바랍니다.
http://blog.naver.com/hjo0075?Redirect=Log&logNo=140010702109


최근에 SQL Server 2005 가 발표되면서, 자체 암호화 기능을 제공합니다.

SQL Server 2005의 데이터 암호화 도움말을 참고해 보세요.
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ko/udb9/html/38e9bf58-10c6-46ed-83cb-e2d76cda0adc.htm

동적 웹페이지를 위한 기본 AJAX 클래스 코드

var AJAX = {
        XmlHttp: null,
        create: function () {
                try {
                        if (window.XMLHttpRequest) {
                                AJAX.XmlHttp = new XMLHttpRequest();
                                // 일부의 모질라 버전을은 readyState property,
                                // onreadystate event를 지원하지 않으므로. - from xmlextrs

                                if (this.XmlHttp.readyState == null) {
                                        this.XmlHttp.readyState = 1;
                                        this.XmlHttp.addEventListener("load", function () {
                                            this.XmlHttp.readyState = 4;
                                            if (typeof this.XmlHttp.onreadystatechange == "function")
                                                   tmpXmlHtp.onreadystatechange();
                                        }, false);
                                }
                        } else {
                                AJAX.XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                }
                catch (e) {
                        alert("Your browser does not support XmlHttp objects");
                        //throw new Error("Your browser does not support XmlHttp objects");
                }
        }
}


AJAX.openXML =  function (method, url, async, uname, pswd) {
        if (AJAX.XmlHttp != null) {
                if (uname == undefined) {
                        AJAX.XmlHttp.open(method, url, async, uname, pswd);
                } else {
                        AJAX.XmlHttp.open(method, url, async);
                }
                AJAX.XmlHttp.onreadystatechange = function () {
                        if (AJAX.XmlHttp.readyState == 4) {
                                if (AJAX.XmlHttp.status == 200) {
                                  // 200 은 HTTP에서 성공 i.e) 404 : not found
                                        AJAX.statusSuccessHandler(AJAX.XmlHttp.responseXML.xml);
                                } else {
                                        AJAX.statusErrorHandler();
                                        alert('Error while loading!');
                                }
                        }
                }
        } else {
                alert ("need to create xmlhttp object");
        }
}


AJAX.openText =  function (method, url, async, uname, pswd) {
        if (AJAX.XmlHttp != null) {
                if (uname == undefined) {
                        AJAX.XmlHttp.open(method, url, async, uname, pswd);
                } else {
                        AJAX.XmlHttp.open(method, url, async);
                }
                AJAX.XmlHttp.onreadystatechange = function () {
                        if (AJAX.XmlHttp.readyState == 4) {
                                if (AJAX.XmlHttp.status == 200) {
                                  // 200 은 HTTP에서 성공 i.e) 404 : not found
                                        AJAX.statusSuccessHandler(AJAX.XmlHttp.responseText);
                                } else {
                                        AJAX.statusErrorHandler();
                                        alert('Error while loading!');
                                }
                        }
                }
        } else {
                alert ("need to create xmlhttp object");
        }
}


AJAX.send = function (content) {
                if (content == undefined)
                        AJAX.XmlHttp.send(null);
                else
                        AJAX.XmlHttp.send(content);
}


AJAX.setOnReadyStateChange = function (funcname) {
                if (AJAX.XmlHttp) {
                        AJAX.XmlHttp.onreadystatechange = funcname;
                } else {
                        alert ("need to create xmlhttp object");
                }
}


// status 200 일 때 처리 함수
AJAX.statusSuccessHandler = function (data) {
                alert(data);
}


AJAX.setStatusSuccessHandler = function (funcname) {
                AJAX.statusSuccessHandler = funcname;
}


        // status 200 일 때 기본 처리 함수
        // setStatusSuccessHandler() 로 대체 가능



AJAX.statusErrorHandler = function (status) {

                AJAX.rtnText = AJAX.XmlHttp.responseText;
}


AJAX.setStatusSuccessHandler = function (funcname) {
                AJAX.statusSuccessHandler = funcname
}


AJAX.setStatusErrorHandler = function (funcname) {

                AJAX.statusErrorHandler = funcname
}


AJAX.setRequestHeader = function (label, value)
{
        AJAX.XmlHttp.setRequestHeader(label, value);
}


// 사용법
//        AJAX.create();
//        AJAX.openText('GET','jsontest.php', true);
//        AJAX.setStatusSuccessHandler(proc);
//        AJAX.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//        AJAX.send("test=테스트");
//
//        function proc(abc)
//        {
//                document.getElementById('test').innerHTML = abc;
//        }



출처 :
http://www.oraclejava.co.kr/zboard/view.php?id=php&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum
&desc=asc&no=39


2006년 2월 21일 화요일

Active-X 인터넷 익스플로러의 설계 변경 pre-patch 파일



2월 정기보안 패치시에, 사용자 선택사항으로 배포를 하기로 했으나,..
3월달로 연기된바 있습니다..

이와 관련해서,, 이미 수많은 웹개발자 사이트등에서 회피 스크립트가 많이 나오고 있습니다..

하셨다면,.. 이제 패치를 적용해서 정상 작동하는지 확인할수 있는 한글판 패치를 MS에서 올려놓았습니다.. 얼마전에는 영문만 있어서 영문 Windows 를 설치하고 확인하시는 개발자들이 많았습니다..

테스트를 위한 한글 패치 Pre-release 버전 배포 개시:

http://download.microsoft.com/download/8/3/d/83dcd69f-739d-4297-8258-8c5218e09fff/WindowsXP-KB912945-x86-KOR.exe

(이 파일은 Windows XP SP2에서 실행하는 Internet Explorer 6에 설치하실 수 있으며, 개발자를 위한 pre-release 버전으로서 테스트 목적으로만 제공됨)

2006년 2월 19일 일요일

제 1회 INETA(International .NET Association) 컨퍼런스




International .NET Association (INETA)은 Microsoft .NET Platform 에 관심있는 전세계 사용자 그룹의 연합이며, 비 상업적이며, 독립적인 조직이라 합니다.

이번 INETA 컨퍼런스는, .NET Framework 2.0, C# 2.0, AJAX, Team Foundation Server 등 최신기술을 다룬다고 합니다.

관심있는 분들은 한번 참여해 보시길...^^;

http://www.microsoft.com/korea/events/2006_INETA/default.asp


IIS 6 에서 PHP 5.x 설치하기

1. PHP 설치

1.1 최신 버젼인 PHP 5.1.2 버젼을 다운로드 : http://www.php.net/downloads.php

다운로드를 할때, 버젼은 "Collection of PECL modules for PHP 5.1.2 " 을 다운로드를 한다. PECL은 PHP의 광범위한 확장 라이브러리 모듈을 제공한다 한다.

msi 인스톨러보다는, zip 압축을 다운받기를 바람..

확장라이브러리는 http://pear.php.net/packages.php 에서 필요한 수많은 모듈을 다운로드 할수있다.

블로그중에, PECL 관련 포스트도 참고해 보기 바란다.
http://blog.naver.com/jegom?Redirect=Log&logNo=120004156186

1.2 php.ini-recommand 를 php.ini 로 변경

압축을 푼 PHP 디렉토리에서, php.ini* 로 되어 있는 파일은, PHP에서 권장하는 설정값이 적용되어 있는 파일이다.

2. PHP 환경설정

2.1 php.ini에서 cgi.force_redirect 값이 0 인지 확인.

2.2 browscap.ini 파일 설치하기

꼭 설치할 필요는 없다. 다만, PHP에서 브라우져 특성에 따라 최적의 스크립트 작동을 하게 된다.

php_browscap.ini는 http://www.garykeith.com/browsers/downloads.asp 에서 다운로드가 가능하며,  PHP 설치디렉토리의 extras에 복사해 넣고, php.ini에서 browscap 에 다음과 같이 경로를 지정해 준다.

browscap=C:\PHP\extras\browscap.ini

2.3 php.ini 에서 세션파일 저장 경로 설정.

session.save_path=C:\PHP\Sessions

2.4 PHP 확장 라이브러리 설정

추가적인 확장모듈을 설치하고자 한다면 다음 웹사이트를 방문해 보기 바란다.
http://ca3.php.net/manual/en/install.windows.extensions.php

php.ini 에서 extension_dir 확장모듈 경로를 지정해준다.

 "C:\PHP\extension"

extension=php_mbstring.dll
extension=php_bz2.dll
extension=php_cpdf.dll
extension=php_curl.dll
extension=php_dba.dll
extension=php_dbase.dll
extension=php_dbx.dll
;extension=php_exif.dll
extension=php_fdf.dll
extension=php_filepro.dll
extension=php_gd2.dll
extension=php_gettext.dll
;extension=php_ifx.dll
extension=php_iisfunc.dll
extension=php_imap.dll
extension=php_interbase.dll
extension=php_java.dll
extension=php_ldap.dll
;extension=php_mcrypt.dll
extension=php_mhash.dll
extension=php_mime_magic.dll
extension=php_ming.dll
extension=php_mssql.dll
extension=php_msql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8.dll
extension=php_openssl.dll
;extension=php_oracle.dll
extension=php_pdf.dll
extension=php_pgsql.dll
extension=php_shmop.dll
extension=php_snmp.dll
extension=php_sockets.dll
;extension=php_sybase_ct.dll
extension=php_tidy.dll
extension=php_ffi.dll
extension=php_xmlrpc.dll
extension=php_xsl.dll
;extension=php_yaz.dll
extension=php_zip.dll

위와 같이 on 인 확장모듈은 굳이 on을 하지 않아도 된다. 그러나 on을 해도 대부분 오류가 없다. 다 off 해도 좋은나, 예로 mssql을 이용한다면 php_mssql.dll 은 on을 해야 한다.

2.5 php dll 파일 경로설정.

다음 2가지 방법중 1가지를 하면 된다. 대부분 첫번째 a 방법을 선택한다.

a. C:\PHP의 php-dll 이 아닌 모든 dll 파일을 System32에 복사한다. 또는,

b. Windows PATH 경로에서 "C:\PHP" 를 추가해 준다. 
이 방법은 추후 업그레이드나 삭제를 훨씬 쉽게 한다. System32에 복사해서 여기저기 퍼져 있으면 추후 업그레이드나 삭제시 잊어버리게 된다.

2.6 레지스트리에 PHP 설치경로 추가. 

이 설정은 php의 환경설정을 지정된 경로에서 찾게 한다. 굳이 php.ini를 Windows 디렉토리에 복사해 넣을 필요가 없다.

HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath = C:\PHP

다음을 텍스트파일에 .reg 확장자로 저장후 실행하면 쉽게 적용된다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
"IniFilePath"="C:\\PHP"

3. IIS에 PHP 설정하기

3.1 IIS의 웹서비스 확장에 추가한다.

확장 이름에는 "PHP ISAPI Extension" 를 추가하고 확장모듈 dll을 PHP 설치디렉토리의 php5isapi.dll 파일을 지정한다. 그런다음에 허용설정을 해준다.

php를 실행하는 방법은 지금과 같이 ISAPI 모듈을 이용하는 것과 php-cgi.exe 를 이용하는 방법이 있다. 되도록이면, ISAPI 모듈을 이용하는 것이 좋다.

*php를 적용하는 방법에는 2가지가 있다. 웹 루트에 적용하는 것과 특정 웹사이트에 적용하는 방법이 있으니 적용코자 하는 경우에 따라 선택하면 된다.

3.2 .php 확장자를 추가해 준다.

역시 .php 확장에 대한 실행경로는 php5isapi.dll 을 지정해 주며, 동사에는 GET, POST, HEAD 만 허용해 준다. 굳이 많이 허용을 해줘봤자 보안에 구멍만 만들어 줄 뿐이다.

3.3 IIS를 재시작 한다. 만약 Window PATH 에 적용했다면 리붓팅을 해준다.

4. 웹페이지 테스트

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
  <!-- testing sessions -->
  <?php session_start(); ?>
  
  <!-- testing browscap.ini -->
  <?php
   echo $_SERVER['HTTP_USER_AGENT'] . "<br/><br/>";
   $browser = get_browser(null, true);
   print_r($browser);
   echo "<br/><br/>";
  ?>
  
  <!-- a general PHP test -->
  <?php phpinfo(); ?>
 </body>
</html>

test.php 파일에 다음과 같은 코드로 php 실행 여부 및 환경설정값을 확인할 수 있다.

5. 트러블슈팅 

5.1 작동하지 않는다면,..

해당 웹사이트의 ISAPI 필터에 필터이름 "PHP" 에 실행파일을 php5isapi.dll 을 지정해 줘 본다. 물론 등록후에는 IIS를 재시작 해야 만이 필터가 로드된다. 

ISAPI 필터에 등록되면, 웹서버의 성능상 그리 권장사항은 아니다. 필터가 많을수록 웹요청에 대한 필터 처리를 통과해야 하기 때문이다.

5.2 browscap.ini 에서 오류 발생시...,

php.ini에서 browscap의 실제 경로를 다시 확인하여 지정해줘 본다.

5.3 401 권한오류 또는 403 퍼미션 거부 오류.

이 부분은 ISAPI 모듈이 아니라, CGI(php-cgi.exe)를 이용한 경우가 그렇다. cgi를 이용한다면 해당 웹사이트를 실행하는 어플리케이션 풀의 실행 계정이 PHP 설치경로 권한이 있는지 확인해 본다.

5.4 세션이 저장되지 않는다.,,,

세션은 앞서 지정했던 php.ini 파일에 지정한 경로에 인터넷게스트계정(IUSR_) 이 쓰기권한 정도의 권한을 지정해 준다.


ISP별 DNS 정리

KT
kns.kornet.net 168.126.63.1
kns2.kornet.net 168.126.63.2

하나로
qns1.hananet.net 210.220.163.82
qns2.hananet.net 219.250.36.130
qns3.hananet.net 210.94.6.67
cns1.hananet.net 210.94.0.73
cns2.hananet.net 221.139.13.130
cns3.hananet.net 210.180.98.74
ns.ngene.net 211.58.252.62
ns2.ngene.net 211.58.252.94
ns.dreamx.com 210.181.1.41 
ns2.dreamx.com 210.181.4.51

두루넷
nsgr1.thrunet.com 210.117.65.1
nsgr2.thrunet.com 210.117.65.2

드림라인
ns.cjdream.net  210.181.1.24
ns2.cjdream.net  210.181.4.25

신비로
ns.shinbiro.com  202.30.143.11
ns2.shinbiro.com  203.240.193.11

데이콤
ns.dacom.co.kr 164.124.101.2
ns2.dacom.co.kr 203.248.240.31

파워콤
cns2.bora.net 164.124.107.9
cns3.bora.net 203.248.252.2 


원본:
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=44885
 


2006년 2월 14일 화요일

WMI : 디스크 사용량 모니터링 Vbscript

다음 코드는 디스크 파티션의 각 사용량/여유공간을 모니터링 하는 스크립트이다.

코드내, 각 파티션 부분만 필요한대로 변경하면 되나,. 가져올수 있는 값은 상당히 많으므로 다음처럼 꼭 여유공간량이 아니더라도 % 로도 추출할 수 있다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDiskDrives = objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_LogicalDisk where Name <> '_Total'")

For Each objDiskDrive in colDiskDrives
    'Wscript.Echo "Drive Name: " & objDiskDrive.Name
    'Wscript.Echo "Free Space: " & objDiskDrive.FreeMegabytes

 If (objDiskDrive.Name = "C:" and objDiskDrive.FreeMegabytes < 200) Then
  vcheck = true
  WScript.Echo "C: 용량 200M 이하"
 elseIf (objDiskDrive.Name = "D:" and objDiskDrive.FreeMegabytes < 200) Then
  vcheck = true
  WScript.Echo "D: 용량 200M 이하"
 elseIf (objDiskDrive.Name = "E:" and objDiskDrive.FreeMegabytes < 200) Then
  vcheck = true
  WScript.Echo "E: 용량 200M 이하"
 Else

 End if

Next

WMI : TCP-IP Network Interface 성능 모니터링 Vbscript

다음 코드는, 2초 간격으로 네트워크 인터페이스를 통해서 발생하는 트래픽을 모니터링 하는 코드이다.

Windows Server 2003 및 XP에 서만 체크가 가능하다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_TCPIP_NetworkInterface").objectSet
objRefresher.Refresh

For i = 1 to 5
    For Each objItem in colItems
        Wscript.Echo "Bytes Received Per Second: " & _
        objItem.BytesReceivedPersec
        Wscript.Echo "Bytes Sent Per Second: " & objItem.BytesSentPersec
        Wscript.Echo "Bytes Total Per Second: " & objItem.BytesTotalPersec
        Wscript.Echo "Caption: " & objItem.Caption
        Wscript.Echo "Current Bandwidth: " & objItem.CurrentBandwidth
        Wscript.Echo "Description: " & objItem.Description
        Wscript.Echo "Name: " & objItem.Name
        Wscript.Echo "Output Queue Length: " & objItem.OutputQueueLength
        Wscript.Echo "Packets Outbound Discarded: " & _
            objItem.PacketsOutboundDiscarded
        Wscript.Echo "Packets Outbound Errors: " & _
            objItem.PacketsOutboundErrors
        Wscript.Echo "Packets Per Second: " & objItem.PacketsPersec
        Wscript.Echo "Packets Received Discarded: " & _
            objItem.PacketsReceivedDiscarded
        Wscript.Echo "Packets Received Errors: " & _
            objItem.PacketsReceivedErrors
        Wscript.Echo "Packets Received Non-Unicast Per Second: " & _
            objItem.PacketsReceivedNonUnicastPersec
        Wscript.Echo "Packets Received Per Second: " & _
            objItem.PacketsReceivedPersec
        Wscript.Echo "Packets Received Unicast Per Second: " & _
            objItem.PacketsReceivedUnicastPersec
        Wscript.Echo "Packets Received Unknown: " & _
            objItem.PacketsReceivedUnknown
        Wscript.Echo "Packets Sent Non-Unicast Per Second: " & _
            objItem.PacketsSentNonUnicastPersec
        Wscript.Echo "Packets Sent Per Second: " & objItem.PacketsSentPersec
        Wscript.Echo "Packets Sent Unicast Per Second: " & _
            objItem.PacketsSentUnicastPersec
        Wscript.Sleep 2000
        objRefresher.Refresh
    Next
Next

만약 Windows 2000 환경이라면, 
다음과 같이 성능카운터의 원시데이터를 이용해서 계산을 해줘야 한다.

NetworkCardName = "3Com EtherLink XL 10_100 PCI For Complete PC Management NIC [3C905C-TX]"
'카드 이름에서, ()문자열은 []로 변경해야하며, / 문자는 _ 로 변경해야 함.

 

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface WHERE Name = '"& NetworkCardName &"'")

For Each objItem In colItems
      'WScript.Echo "BytesSentPersec: " & objItem.BytesSentPersec
 D1 = objItem.BytesSentPersec
Next

WScript.Sleep(1000)

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface WHERE Name = '"& NetworkCardName &"'")

For Each objItem In colItems
      'WScript.Echo "BytesSentPersec: " & objItem.BytesSentPersec
 D2 = objItem.BytesSentPersec
Next

WScript.Echo "Total Bytes/s=" & D2-D1

 


WMI : 실시간 이벤트로그 모니터링 Vbscript

다음 코드는 실시간으로 이벤트로그를 모니터링하는 코드이다.

예제에서는,  이벤트코드가 533 인것을 모니터링하는 코드이다. 응용하면, 각 이벤트로그 종류나 소스 또는 다른 이벤트코드를 모니터링 할수 있다.

Windows NT 4 에서 Windows Server 2003 까지 지원한다.


strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate, (Security)}!\\" & _
        strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _   
    ("Select * from __instancecreationevent where " _
        & "TargetInstance isa 'Win32_NTLogEvent' " _
            & "and TargetInstance.EventCode = '533' ")

Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
     strAlertToSend = objLatestEvent.TargetInstance.User _
         & " attempted to access DatabaseServer."
     Wscript.Echo strAlertToSend
Loop

 


WMI : Ping 체크를 통한 서버 모니터링 Vbscript

다음 스크립트는, WMI를 통해서 특정 호스트에 대해서 ping 모니터링을 하는 코드이다.

Windows Server 2003 및 XP 에서만 지원하는 코드이다.


strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPingedComputers = objWMIService.ExecQuery _
    ("Select * from Win32_PingStatus Where Address = '192.168.1.37'")

For Each objComputer in colPingedComputers
    If objComputer.StatusCode = 0 Then
        Wscript.Echo "Remote computer responded."
    Else
        Wscript.Echo "Remote computer did not respond."
   End If
Next

 


WMI : 사용가능한 Memory 모니터링 Vbscript

다음은, 컴퓨터에서 사용가능한 메모리량을 체크하는 스크립트이다.
아래의 경우 4M 이하인 경우 메시지를 출력한다.

Windows Server 2003 및 XP 에서만 지원하는 코드이다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set objMemory = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_PerfOS_Memory").objectSet
objRefresher.Refresh

Do
    For Each intAvailableBytes in objMemory
        If intAvailableBytes.AvailableMBytes < 4 Then
            Wscript.Echo "Available memory has fallen below 4 megabytes."
        End If
    Next
    objRefresher.Refresh
Loop

 


WMI : Processor 사용량 모니터링 Vbscript

다음은, WMI 를 통해서 CPU 사용량을 모니터링하는 스크립트 이다.
루프를 돌면서, 6초 간격으로 체크하며, 90% 이상일경우 초과 메시지를 출력한다.

지원OS는, Windows Server 2003과 XP 에서만 체크가 가능하다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objProcessor = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet
intThresholdViolations = 0
objRefresher.Refresh

Do
    For Each intProcessorUse in objProcessor
        If intProcessorUse.PercentProcessorTime > 90 Then
            intThresholdViolations = intThresholdViolations + 1
                If intThresholdViolations = 10 Then
                    intThresholdViolations = 0
                    Wscript.Echo "Processor usage threshold exceeded."
                End If
        Else
            intThresholdViolations = 0
        End If
    Next
    Wscript.Sleep 6000
    objRefresher.Refresh
Loop

 만약, Windows 2000 이라면, 성능카운터의 원시데이터를 이용해야 한다.

Set objService = GetObject("Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2")

Set objInstance1 = objService.Get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
N1 = objInstance1.PercentProcessorTime
D1 = objInstance1.TimeStamp_Sys100NS

WScript.Sleep(1000)

Set perf_instance2 = objService.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
N2 = perf_instance2.PercentProcessorTime
D2 = perf_instance2.TimeStamp_Sys100NS

PercentProcessorTime = (1 - ((N2 - N1)/(D2-D1)))*100

WScript.Echo "% Processor Time=" , Round(PercentProcessorTime,2)

2006년 2월 13일 월요일

[공지] 서버주무르기 홈페이지 RSS 서비스

안녕하세요.? ^^;

서버주무르기 홈페이지 운영자 입니다.  개인 홈페이지 이긴 하지만,,  최근의 추세에 맞춰서.. RSS 서비스를 제공하기 시작 했습니다.

현재는 Tip&Tech 컨텐츠와, Q&A 게시판 만 링크서비스를 제공하고 있습니다.

 http://www.serverinfo.pe.kr/RssService.aspx?Content=TipnTech

 http://www.serverinfo.pe.kr/RssService.aspx?Content=QnA

RSS는 다음과 같은 툴들을 이용해서 구독이 가능합니다.

 네이버 검색 결과 링크를 보시면, RSS에 대한 설명과
몇개의 툴 웹사이트를 통해서 구독이 가능합니다.

http://search.naver.com/search.naver?where=nexearch&query=rss&frm=t1

혹시나,..
 한메일을 이용중이시면, 메뉴중에 RSS넷을 이용하시면 됩니다.

http://mail.daum.net/hanmail/Index.daum?frame=rss

2006년 2월 11일 토요일

IBM, DB2 데이터베이스 무료 버전 발표

IBM이, 최근 DB2 무료 버젼을 발표했습니다...

Oracle, Microsoft 등도 무료 버젼을 배포하고 있지요.. 물론 이게 다 오픈소스의 영향이며, MySQL 때문이겠지요...

DB2 Universal Database Express Edition

관련기사:
http://www.zdnet.co.kr/itbiz/press/enterprise/dbms/0,39032019,39144370,00.htm

제품명은, DB2 Universal Database Express Edition for Linux and Windows 이며,

다운로드는 IBM 홈페이지에서 다운로드가 가능합니다...



VMWare Server 버젼 무료 배포

VMWare에서, 기존에 상용으로 판매하던 가상화 툴을 오픈소스 및 타 벤더의 제품 개발로 인해서 위기 의식을 느낀 나머지 무료 버젼을 배포 한다고 합니다..

다음 웹사이트에서 다운로드가 가능하며, 현재는 베타버젼이라고 합니다..
관심 있으신분은 테스트 해보시길....

이와 함께,, 무료로 배포하고 있는 VMWare Player 툴도 아주 좋은 툴인것 같습니다...


http://www.vmware.com/products/server/

2019년 12월 MS 취약점 패치 주요 사항

서버 관련 주요 중요 취약점 CVE-2019-1470 | Hyper-V 정보 유출 취약성 https://portal.msrc.microsoft.com/ko-KR/security-guidance/advisory/CVE-2019-1470 CVE...