2006/04/27

URL 분석을 위한 System.Uri 클래스

가끔 프로그래밍을 하다보면 URL 분석을 할 경우가 필요하다. 이럴때 정말 유용한 클래스 하나를 소개하겠다. 바로 System.Uri 클래스 이다. 자. 백문이불여일타 이다. 아래와 같이 코딩해보자

using System;
namespace StartSocket
{
    class Class1
    {
        [STAThread] static void Main(string[] args)
        {
            string taeyoUrl="http://www.taeyo.pe.kr/threadboard/Content.asp?table=Board_Asp&seqs=93626&page=1";

            Uri uri = new Uri(taeyoUrl);

            Console.WriteLine("Host : " + uri.Host);
            // www.taeyo.pe.kr
            Console.WriteLine("URL Query : " + uri.Query);
            //?table=Board_Asp&seqs=93626&page=1&IsSearch= 쿼리가 출력된다.
            Console.WriteLine("Host Type:" + uri.HostNameType);
            // Dns 가 출력된다. IP 인경우 IPv4 로 출력된다.
            Console.WriteLine(uri.AbsolutePath);
            //threadboard/Content.asp 절대 경로가 출력된다.
        }
    }

Url 에 대한 정보를 상세하게 분석하여 필요한 정보를 대부분 string 형태로 얻어올 수 있다 정말 유용한 클래스 이다.

출처: http://www.taeyo.net/lecture/NET_01/NetSocket02.asp



27-TaeyoBanNew.gif

2006/04/23

WMI 명령줄 유틸리티 Wmic.exe

Wmic.exe는 Windows XP 이상부터 내장되어 있는 WMI 정보를 커맨드라인에서 쿼리할수 있느 툴입니다. 간편하면서도 강력합니다.

다음은 컴퓨터의 디스크 특정 정보를 쿼리한 내용입니다.

C:\>wmic DISKDRIVE get Caption,InterfaceType,SystemName

Caption            InterfaceType  SystemName
FUJITSU MHT2040AT  IDE            SERVERINFO

출력포맷을 컴마로 지정한 경우

C:\>wmic DISKDRIVE get Caption,InterfaceType,SystemName /FORMAT:CSV

Node,Caption,InterfaceType,SystemName
SERVERINFO,FUJITSU MHT2040AT,IDE,SERVERINFO

출력포맷을 XML 형식으로 지정한 경우

C:\>wmic DISKDRIVE get Caption,InterfaceType,SystemName /FORMAT:XML.XSL /TRANSLATE:BASICXML

<DIV STYLE="font-family:Courier; font-size:10pt; margin-bottom:2em">
<DIV STYLE="margin-left:1em">
<SPAN STYLE="color:gray"><COMMAND<SPAN STYLE="color:navy">
SEQUENCENUM="<SPAN STYLE="color:black">1</SPAN>"</SPAN>
<SPAN STYLE="color:navy">
ISSUEDFROM="<SPAN STYLE="color:black">SERVERINFO</SPAN>"</SPAN>
<SPAN STYLE="color:navy">
STARTTIME="<SPAN STYLE="color:black">04-22-2006T14:57:40</SPAN>"</SPAN>
......... 계속

Wmic에서는 특정 클래스명을 모르더라도 이미 지정된 별칭을 통해서 쿼리가 가능합니다. 앞서 예제도 별칭을 통해서 쿼리 한것입니다.

ALIAS                    - 로컬 시스템에서 사용 가능한 별칭 액세스
BASEBOARD                - 기본 보드(마더 보드 또는 시스템 보드) 관리
BIOS                     - 기본 입출력 서비스(BIOS) 관리
BOOTCONFIG               - 부트 구성 관리
CDROM                    - CD-ROM 관리
COMPUTERSYSTEM           - 컴퓨터 시스템 관리
CPU                      - CPU 관리
CSPRODUCT                - SMBIOS의 컴퓨터 시스템 제품 정보
DATAFILE                 - DataFile 관리
DCOMAPP                  - DCOM 응용 프로그램 관리
DESKTOP                  - 사용자 데스크톱 관리
DESKTOPMONITOR           - 데스크톱 모니터 관리
DEVICEMEMORYADDRESS      - 장치 메모리 주소 관리
DISKDRIVE                - 실제 디스크 드라이브 관리
DISKQUOTA                - NTFS 볼륨의 디스크 공간 사용
DMACHANNEL               - 직접 메모리 액세스(DMA) 채널 관리
ENVIRONMENT              - 시스템 환경 설정 관리
FSDIR                    - 파일 시스템 디렉터리 항목 관리
GROUP                    - 그룹 계정 관리
IDECONTROLLER            - IDE 컨트롤러 관리
IRQ                      - 인터럽트 요청(IRQ) 관리
JOB                      - 일정 서비스를 사용하여 예약된 작업 액세스
LOADORDER                - 실행 종속성을 정의하는 시스템 서비스 관리
LOGICALDISK              - 로컬 저장 장치 관리
LOGON                    - LOGON 세션
MEMCACHE                 - 캐시 메모리 관리
MEMLOGICAL               - 시스템 메모리 관리(구성 레이아웃 및 사용 가능한 메모리)
MEMORYCHIP               - 메모리 칩 정보.
MEMPHYSICAL              - 컴퓨터 시스템의 실제 메모리 관리
NETCLIENT                - 네트워크 클라이언트 관리
NETLOGIN                 - (특정 사용자의) 네트워크 로그인 정보 관리
NETPROTOCOL              - 프로토콜(및 네트워크 특성) 관리
NETUSE                   - 활성 네트워크 연결 관리
NIC                      - 네트워크 인터페이스 컨트롤러(NIC) 관리
NICCONFIG                - 네트워크 어댑터 관리
NTDOMAIN                 - NT 도메인 관리
NTEVENT                  - NT 이벤트 로그의 항목
NTEVENTLOG               - NT 이벤트 로그 파일 관리
ONBOARDDEVICE            - 마더 보드(시스템 보드)에 내장된 일반 어댑터 장치 관리
OS                       - 설치된 운영 체제 관리
PAGEFILE                 - 가상 메모리 파일 스와핑 관리
PAGEFILESET              - 페이지 파일 설정 관리
PARTITION                - 실제 디스크의 파티션된 영역 관리
PORT                     - I/O 포트 관리
PORTCONNECTOR            - 실제 연결 포트 관리
PRINTER                  - 프린터 장치 관리
PRINTERCONFIG            - 프린터 장치 구성 관리
PRINTJOB                 - 인쇄 작업 관리
PROCESS                  - 프로세스 관리
PRODUCT                  - 설치 패키지 작업 관리
QFE                      - QFE(Quick Fix Engineering)
QUOTASETTING             - 볼륨의 디스크 할당량 정보 설정
RDACCOUNT                - 원격 데스크톱 연결에 대한 사용 권한 관리.
RDNIC                    - 특정 네트워크 어댑터에서의 원격 데스크톱 연결 관리.
RDPERMISSIONS            - 특정 원격 데스크톱 연결에 대한 사용 권한.
RDTOGGLE                 - 원격으로 원격 데스크톱 수신 대기자 켜기 또는 끄기.
RECOVEROS                - 운영 체제에 오류가 있을 때 메모리에서 수집할 정보
REGISTRY                 - 컴퓨터 시스템 레지스트리 관리
SCSICONTROLLER           - SCSI 컨트롤러 관리
SERVER                   - 서버 정보 관리
SERVICE                  - 서비스 응용 프로그램 관리
SHADOWCOPY               - 섀도 복사본 관리.
SHADOWSTORAGE            - 섀도 복사본 저장소 영역 관리.
SHARE                    - 공유 리소스 관리
SOFTWAREELEMENT          - 시스템에 설치된 소프트웨어 제품 요소 관리
SOFTWAREFEATURE          - SoftwareElement의 소프트웨어 제품 하위 집합 관리
SOUNDDEV                 - 사운드 장치 관리
STARTUP                  - 사용자가 컴퓨터에 로그온할 때 자동으로 실행할 명령 관리
SYSACCOUNT               - 시스템 계정 관리
SYSDRIVER                - 기본 서비스를 위한 시스템 드라이버 관리
SYSTEMENCLOSURE          - 실제 시스템 엔클로저 관리
SYSTEMSLOT               - 포트, 슬롯, 주변 기기 및 기타 연결점의 실제 연결점 관리
TAPEDRIVE                - 테이프 드라이브 관리
TEMPERATURE              - 온도 센서(전자식 온도계)의 데이터 관리
TIMEZONE                 - 표준 시간대 데이터 관리
UPS                      - UPS 관리
USERACCOUNT              - 사용자 계정 관리
VOLTAGE                  - 전압 센서(전자식 전압계) 데이터 관리
VOLUME                   - 로컬 저장소 볼륨 관리.
VOLUMEQUOTASETTING       - 디스크 할당량 설정을 특정 디스크 볼륨과 연결
VOLUMEUSERQUOTA          - 사용자 당 저장소 볼륨 할당량 관리.
WMISET                   - WMI 서비스 작업 매개 변수 관리

다음과 같이, 클래스명을 통해서 직접 쿼리가 가능합니다., 별칭에 없는 것은 클래스를 통하거나 별칭을 등록해서 편리하게 이용할수 있겠죠..

wmic:root\cli>path win32_processor get Caption,Description,Name
Caption                          Description                      Name
x86 Family 6 Model 9 Stepping 5  x86 Family 6 Model 9 Stepping 5  Intel(R) Pentium(R) M processor 1400MHz


이러한 기능외에, WMI는 쿼리 명령어를 지원합니다. 이를 테면 특정 쿼리를 통해서 WMI값을 업데이트하면 시스템에 적용이 됩니다. 컴퓨터를 리부팅/종료 까지 할수 있습니다.

다음 처럼 시스템 종료나 리붓팅이 가능합니다.

wmic os where "status='ok'" call reboot  -리붓팅
wmic os where "status='ok'" call shutdown  -종료

명령줄 도구이지만,. 네트워크를 통해서 쿼리도 가능하고, XML 형태로도 출력이 가능하므로 이용방법에 따라서 서버관리자에는 상당히 유용한 툴이 될수도 있습니다.

좀더 자세한 사용법은, 도움말을 참조해 보시기 바랍니다.

 


2006/04/22

SQL Server 2005 서비스 팩 1

SQL Server 2005 가 나온지 얼마되지 않아서,..
벌써 SQL Server 2005 서비스 팩 1 이 발표되었네요,.

4월 19일자로 다운로드에 올라왔습니다.

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=cb6c71ea-d649-47ff-9176-e7cac58fd4bc

2006/04/20

유저 컨트롤에서 페이지의 ViewState 접근...

마침 저도 User Control 에서 Page의 상태 값에 접근할 필요가 있어서 구현을 해보니 ViewState 속성에 직접 접근하는 것은 않되더군요.

그런데 MSDN 의 예제 코드에서 속성의 get, set 메서드 구현시 ViewState 값을 사용하는 것을 본 적이 있어서

Page 의 속성 정의를 통해 접근을 시도해보니 되더라구요.

구체적으로 말씀드리면

Page 의 속성을 정의 해놓고 (물론 속성 값의 한정자는 public 으로...
속성의 get, set 메서드에 ViewState 값을 이용합니다.

예를 들어

Page 에 StateValue 라는 속성을 정의 하고 StateValue 의 get, set 메서드를 다음과 같이 구현합니다.

public string StateValue
{
    get
    {
        if (ViewState["statevalue"] == null)
            return "";\
        else
            return ViewState["statevalue"].ToString();
    }
    set
    {
        ViewState["statevalue"] = value;
    }
}

그리고 WebForm1 이라는 Page 에 포함된 User Control 에서 WebForm1 의 상태 값을

1. 저장할 때는 ( (WebForm1)Page ).StateValue = "Value1";
2. 검색할 때(읽어 올 때)는 string strPageValue = ( (WebForm1)Page ).StateValue;

와 같은 형식으로 접근하면 될 것 같습니다.

물론 Page 단의 메서드를 통해서 접근하는 것도 가능할 꺼라 생각되고요...

수고하세요.^^

 

 출처: 데브피아
http://www.devpia.com/Forum/BoardView.aspx?no=61989&ref=61949&forumname=ASPNET_QA


2006/04/06

C# 보안 권장 사항

다음 목록은 잠재적인 보안 문제를 빠짐없이 망라한 것이 아닙니다. 이 목록에서는 C# 개발자가 주의해야 할 몇 가지 일반적인 문제만을 중점적으로 설명합니다.

# checked 키워드를 사용하여 정수 계열 형식의 산술 연산 및 변환에 대한 오버플로 검사 컨텍스트를 제어해야 합니다.

# 매개 변수에 대해서 항상 가장 제한적인 데이터 형식을 사용해야 합니다. 예를 들어, 메서드에 데이터 구조의 크기를 나타내는 값을 전달하는 경우 정수 대신 부호 없는 정수를 사용합니다.

# 파일의 이름을 기준으로 판단해서는 안 됩니다. 파일 이름의 표현 방식은 다양하며, 특정 파일만을 대상으로 하는 테스트는 우회될 수 있습니다.

# 암호나 기타 중요한 정보를 절대로 응용 프로그램에 하드코딩하지 말아야 합니다.

# SQL 쿼리를 생성하는 데 사용되는 입력에 대해서 항상 유효성을 검사해야 합니다.

# 메서드에 대한 모든 입력에 대해서 유효성을 검사해야 합니다. System.Text.RegularExpressions 네임스페이스의 정규식 메서드는 전자 메일 주소와 같은 경우에 입력 값의 형식이 올바른지 확인하는 데 유용합니다.

# 예외 정보를 표시해서는 안 됩니다. 이러한 정보는 공격자에게 중요한 단서를 제공할 수 있습니다.

# 가능한 한 최소한의 권한으로 응용 프로그램이 실행되도록 해야 합니다. 사용자가 관리자 권한으로 로그인해야 하는 응용 프로그램은 거의 없습니다.

# 자체 암호화 알고리즘을 사용하지 말고 System.Security.Cryptography 클래스를 사용해야 합니다.

# 어셈블리에 강력한 이름을 부여해야 합니다.

# 중요한 정보를 XML이나 기타 구성 파일에 저장하지 말아야 합니다.

# 네이티브 코드를 래핑하는 관리 코드를 주의 깊게 검사해야 합니다. 특히 버퍼 오버런과 관련하여 네이티브 코드가 안전한지 확인할 필요가 있습니다.

# 응용 프로그램 외부에서 전달되는 대리자를 사용할 때는 주의해야 합니다.

# FxCop을 실행하여 어셈블리가 Microsoft .NET Framework 디자인 지침을 준수하고 있는지 확인합니다. 또한 FxCop에서는 200가지 이상의 코드 결함을 찾아내어 경고할 수 있습니다.

FxCop는 http://www.gotdotnet.com/team/fxcop/ 에서 다운로드 가능하며, 상당히 괜찮은 툴입니다.

출처: MSDN

가장 많이 본 글