ICMP(Internet Contol Message Protocol)는 IETF RFC792에 정의된 프로토콜로써 호스트간 혹은 호스트와 라우터간의 에러 상태 혹은 상태 변화를 알려주고 요청에 응답을 하는 기능을 담당하는 네트워크 제어프로토콜이다. 활성화된 서비스나 포트가 필요하지 않는 유일한 프로토콜이다. 이러한 ICMP의 특징을 악용한 ICMP Flooding은 대량의 ICMP패킷을 공격자가 직접 victim에게 전송하는 방법으로 그 변종의 예러 Smurf, Welchia worm 등이 있다. Smuf는 공격자가 source IP address를 victim의 IP address로 설정한 후, broadcast address로 ICMP ehco request패킷을 전송하면 그 하위 모든 시스템들이 ICMP echo reply 패킷을 victim으로 전송하게 되어 대량의 패킷들이 집중하여 네트워크 부하를 높이게 된다. 최근 발견된 Welchia worm은 감연 시스템에 대하여 IP address의 B클래스를 고정시키고 C클래스부터 증가시키며 ICMP 패킷을 전송하여 다른 감염 대상을 찾고 감염 시스템의 성능을 저하시키는 형태이다.

Snap2.bmp


'scrap' 카테고리의 다른 글

Exploit Site  (0) 2010.03.19
DDOS 개요 및 기법 요약  (0) 2010.03.19
SYN Flooding  (0) 2010.03.19
UDP Flooding  (0) 2010.03.19
Denial Of Service  (0) 2010.03.19

트래픽 모니터로 '패킷 개수' 체크
네트워크 장비라고 함은 스위치, 파이어월, 라우터 등을 말하며, 대다수의 네트워크 장비에는 자체적으로 포트별 트래픽 또는 세션별 트래픽을 관찰할 수 있는 기능이 있다. 물론 포트별 트래픽이나 전체 트래픽을 관찰할 수 있는 NMS(Network Management System)를 활용할 수도 있다. 네트워크 장비를 이용하는 것은 웜 트래픽의 패턴을 찾는다기보다는 트래픽의 양을 관찰하는 것이다. 트래픽이 많고 적음으로 웜인지 아닌지를 판단하는 것은 조금 위험스러운 생각이라고 할 수도 있겠지만, 웜 트래픽의 특징을 생각해보면 간단하게 웜에 감염된 PC 또는 IP 어드레스를 찾을 수 있다. 
여기에서 전체 송수신되는 데이터 양(Bytes)을 기준으로 판단하기 보다 패킷 개수로 판단해야 한다. 데이터 양을 기준으로 판단하면 많은 데이터를 업, 다운로드하는 경우와 혼동될 수 있기 때문이다. 예를 들어 SYN 공격이라고 하면 대략 100Mbps 네트워크에서 초당 1000개 이상의 SYN 패킷이 한 IP 어드레스를 통해 전송된다. 하지만 SYN 패킷은 크기가 65bytes이기 때문에 1초에 전송하는 데이터 양은 65Kbytes이다. 또한 대역폭 사용양도 700Kbps 미만으로 1%도 되지 않는다. 
물론 많은 NMS 도구를 사용해 전체 트래픽 발생량을 수시로 관찰해야 한다. 많은 고객 사이트를 방문하면서 의아해했던 점이 대부분 패킷 개수보다는 대역폭에 영향을 주는 데이터 양에 더 신경을 쓴다는 것이었다. 장비에 과부하를 발생시키는 것은 물론 총 송수신되는 데이터 양일 수도 있지만, 더더욱 영향을 주는 것이 패킷의 개수이다. 이제 다음과 같은 경우를 생각하면서 트래픽을 관찰해 보자.

·특정 IP 어드레스 또는 포트를 살펴보니 송신되는 패킷은 상당히 많은데 수신되는 패킷은 없다
·데이터 양(bytes)에 비해 송수신되는 패킷의 개수가 너무 많다
·한 IP 어드레스가 지나치게 많은 세션을 형성한다

사용자가 아무리 손이 빠르고 애플리케이션이 특수하게 설계돼 있다고 하더라도 1초에 100여 개 이상의 세션을 한 IP 어드레스가 형성하기란 쉽지 않다. 모두가 비정상적인 트래픽으로 생각할 수 있다. 
실제 패킷을 저장할 수 없는 NMS 도구나 장비의 콘솔 화면을 사용하는 것은 간단하고 추가 비용이 들지 않는다는 장점이 있지만, 몇 가지 어려움이 있다. 첫째, 사용자가 수시로 장비에 접속해 트래픽 상태를 관찰해야 하기 때문에 오히려 해당 장비에 부하를 가중할 수 있다. 둘째 과도한 트래픽에 의해 시스템이 과부하 상태인 경우에는 트래픽을 관찰하기 위해 접속하기 조차 힘들 수 있다. 
셋째 IP 어드레스별 트래픽과 세션 정보를 관찰할 수 있지만, 의심되는 트래픽이 실제 웜으로 인해 발생하는 트래픽인지 분석하기 어렵다. 즉, 증거가 될만한 실제 패킷을 저장할 수 없다. 이것은 패킷 저장 기능이 있는 NMS나 IDS(Intrusion Detection System)를 사용해 해결할 수도 있다. 넷째 의심되는 IP 어드레스에 대한 차단은 사용자 몫이다. 주의할 점은 트래픽뿐만 아니라 해당 장비의 CPU, 메모리 상태도 항상 점검해야 한다는 것이다.

'scrap' 카테고리의 다른 글

DDOS 개요 및 기법 요약  (0) 2010.03.19
ICMP Flooding  (0) 2010.03.19
UDP Flooding  (0) 2010.03.19
Denial Of Service  (0) 2010.03.19
dt 명령어  (0) 2010.03.18

UDP(User Datagram Protocol)를 이용한 패킷전달은 비연결형 서비스로서 포트대 포트로 전송한다. 대표적인 응용 서비스로 TFTP, SNMP, 실시간 인터넷 방송들이 이에 해당한다. UDP Flooding은 UDP의 비연결성 및 비신뢰성 때문에 공격이 용이한 방법이다. UDP는 source address와 source port를 spoofing 하기 쉽다. 이러한 약점들을 이용해 과다한 트래픽을 victim에 전송함으로써 spoof가 되는 victim간 네트워크를 마비시킨다. <그림>에 나타낸 바와 같이 공격자가 victim A에게 source IP address를 victim B의 IP address로 spoofing하여 대량의 UDP 패킷을 전송하면 victim A와 victim B는 계쏙해서 서로 패킷을 주고받게 되어 두 시스템 사이의 네트워크에 과부하가 초래된다. 이 공격은 주로 echo와 chargen 서비스를 이용한다.


ICMP Protocol

신뢰성을 제공해주지 못하는 IP Protocol 통신 환경에서 발생할 수 있는 문제에 대한 Feedback을 제공하기 위해 설계되었다. 따라서, 프로토콜 컨트롤을 위해 다양한 형태의 메시지를 포함하고 있다. 그 중 잘못된 서비스 Port로 UDP 패킷이 전달 되었을 때 발생되는 ICMP Destination Port Uncreachable 메시지는 UDP Flooding 공격과 밀접한 관련이 있다.


보통 UDP storm attack 이라 불리는데, UDP 서비스 중에 echo/chargen을 이용하여, 시스템을 다운시키는 공격이다. 이것들을 이용하여 공격을 받는 경우가 많고, 또한 실제로 echo/chargen service는 별로 이용되는 일이 없기 때문에 시스템에서 제거하는 편이 좋다. 제거하는 방법은 /etc/services 와 /etc/inetd.conf 파일에서 echo, chargen을 제거한 후에 inetd 수퍼서버를 다시 띄우는 것이다.

Snap1.bmp

'scrap' 카테고리의 다른 글

ICMP Flooding  (0) 2010.03.19
SYN Flooding  (0) 2010.03.19
Denial Of Service  (0) 2010.03.19
dt 명령어  (0) 2010.03.18
명령어1  (0) 2010.03.18

'scrap' 카테고리의 다른 글

SYN Flooding  (0) 2010.03.19
UDP Flooding  (0) 2010.03.19
dt 명령어  (0) 2010.03.18
명령어1  (0) 2010.03.18
명령어2  (0) 2010.03.18

http://jobdahan.net/server_window/17286


DNS 서버는 자신의 컴퓨터 인터넷 연결 IP Address와 밀접한 관계가 있습니다.

다른 서버들(웹 서버, 데이타베이스 서버, FTP 서버 등)은 자신의 컴퓨터 연결 IP Address가 변경되더라도
각 설정 파일들에 대해 별다른 수정없이 서비스 받고 있는 도메인의 IP Address만 Update 해주면 해결되지만
DNS 서버의 경우에는 그렇지 않습니다.

DNS 서버(BIND9, Windows에서는 ISC BIND 서비스)의 경우에는 서비스 받고 있는 도메인의 IP Address Update
뿐만이 아니라 설정 파일도 변경된 IP Address로 수정해서 BIND9을 재시작 해주어야만 합니다.

가정에 설치된 PC에 서버를 구축하였을 경우 유동 IP를 사용하기 때문에 IP 주소가 자주 변동될 수 있으므로
그에 대한 대책을 마련해야만 합니다.

그 대책의 하나는 자신의 IP 주소가 변경되면 DNIP 사이트에서 서비스 받고 있는 네임서버 도메인
(예 : ns.jobdahan.dnip.net)의 IP 주소를 업데이트 해주어야 하며,

둘째로 DNS 서버가 구축되어 있다면 개별 도메인 zone 파일(예 : jobdahan.dnip.net.zone)에 설정된
각 도메인에 대한 IP 주소도 업데이트 해주어야만 합니다.

우리는 네임서버 도메인을 DNIP 사이트에서 서비스 받고 있으므로 자신의 IP 주소가 변경되었을 경우
DNIP 사이트에 IP 주소를 업데이트 해주면 되는데 그 방법은 이미 “유동 IP를 고정 IP처럼 사용하기” 강좌에서
DNIP.exe를 이용하여 자동으로 업데이트하는 방법을 자세히 설명했었습니다.

DNS 서버는 원래 고정 IP인 곳에 설치하여야만 합니다만 지금 우리는 고정 IP가 아닌 유동 IP인 곳에
DNS 서버를 설치하였습니다. 그렇기 때문에 인터넷 연결 IP 주소가 변경되면 DNS 설정 파일에 있는 IP 주소도
변경시켜 주어야만 하는 약간의 불편함은 감수해야 합니다.

DNS 설정 파일에 있는 IP 주소를 업데이트 해주는 방법으로는 직접 수동으로 설정 파일의 IP 주소를 수정하는 방법과
\bin 디렉터리에 들어가 있는 nsupdate.exe를 이용하는 방법,
그리고 자체 제작한 소프트웨어로 IP 업데이트에 관련된 모든 작업을 자동으로 하는 방법이 있습니다.

여기에서는 수동으로 설정 파일의 IP 주소를 수정하는 방법에 대해서 설명하기로 하겠습니다.


[ 직접 IP Update ]

1) 변경된 인터넷 연결 IP 확인하여 서비스되고 있는 네임서버 도메인 IP 업데이트
 ~ 공유기를 사용하고 있을 때 내 컴퓨터 인터넷 연결 IP 주소를 확인하는 가장 간단한 방법으로는
     FTP 서버인 Hub FTP 창을 열어 [IP 확인] 도구를 클릭해서 자신의 인터넷 연결 IP 주소를 알아 보거나
     Port_Check.exe 같은 소프트웨어를 이용해서 알아 보는 방법이 있습니다.

     (cmd 창의 ipconfig 명령은 공유기를 사용하지 않고 있을 때 인터넷 연결 IP 주소 확인이 가능하지만,
     공유기를 사용하고 있을 때는 공유기의 사설 IP Address(192.168.xxx.xxx)가 표시됩니다.)

     내 컴퓨터의 인터넷 연결 IP Address와 서비스 되고 있는 ns.ID.dnip.net의 IP Address가 서로 다를 경우
     DNIP.exe를 이용하거나 http://www.dnip.net/update.cgi에서 IP Address를 업데이트 해 줍니다.

2) 개별 도메인 설정 zone 파일 수정
 ~ 자신의 IP 주소가 변경되었을 때 설정 파일 중 수정해 주어야 할 부분은 개별도메인 설정 파일인
     HostName.zone(HostName : ns.ID.dnip.net에서 "ns."을 제외한 이름, HostName.zone ⇒ 예:jobdahan.dnip.net.zone)
     파일만 수정하면 됩니다.

     C:\APM_Setup\Server\DNS\etc\ 디렉터리에 있는 jobdahan.dnip.net.zone 파일을 메모장이나 텍스트 에디터로
     열어 설정되어 있는 IP 주소를 모두 변경된 IP 주소로 수정하고 저장합니다.

     예를 들어 자신의 외부 IP 주소가 210.95.205.15에서 210.95.205.105로 변경되었다면
     아래의 내용과 같이 IP 주소가 들어간 부분만 210.95.205.15 ⇒ 210.95.205.105로 수정하고 저장합니다.

C:\APM_Setup\Server\DNS\etc\jobdahan.dnip.net.zone 파일의 내용

$TTL 43200
@ IN SOA ns.jobdahan.dnip.net. root.jobdahan.dnip.net. (
                   2007042710 ;                 ⇒ 이 네임서버의 데이타 버전, 현재 년월일시간으로 수정함
                   3H  ;
                   15M  ;
                   1W  ;
                   1D )  ; 
; Name Server
    IN NS ns.jobdahan.dnip.net.  ;
    IN A 210.95.205.15  ;                       ⇒   IN A 210.95.205.105  ;
; Host name
ns IN A 210.95.205.15  ;                       ⇒   ns IN A 210.95.205.105  ;
; Virtual Host
www IN A 210.95.205.15  ;                   ⇒   www IN A 210.95.205.105  ;
mail IN A 210.95.205.15  ;                    ⇒   mail IN A 210.95.205.105  ;
ftp IN A 210.95.205.15  ;                       ⇒   ftp IN A 210.95.205.105  ;
shop IN A 210.95.205.15  ;                   ⇒   shop IN A 210.95.205.105  ;


3) zone 파일의 Reload 또는 DNS 서버(ISC BIND 서비스)의 재시작
 ~ [시작]-[실행]-cmd 입력하여 cmd 창을 열고, rndc reload 명령을 입력하고 [Enter] 키를 치면
    C:\APM_Setup\Server\DNS\etc\ 디렉터리에 있는 모든 구성 파일들과 zone 파일들이 다시 읽혀져서
    변경시킨 내용들이 DNS 서버에 적용되어 집니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats> rndc reload
server reload successful

C:\Documents and Settings\hats> _


    여기에서 한 가지 알아 두셔야 할 점이 있습니다.
    위와 같이 cmd 창에서 rndc reload 명령을 사용해서 named 데몬을 제어할 수 있는 이유는
    앞서 name.conf 내용 설정에서 named 데몬이 rndc.key 파일의 key 값을 사용하고 있고,

    named 데몬을 제어하는 rndc는 rndc.conf 파일에서 불러온 key 값을 사용하는데
    rndc.key 파일과 rndc.conf 파일의 key 값을 동일하게 해 주었기 때문에 rndc로 named 제어가 가능한 것입니다.


[ DNS 서버(ISC BIND 서비스)의 재시작 ]

설정 파일이 수정되었을 때 rndc reload 명령을 이용하지 않고
DNS 서버 자체를 재시작 해주어도 수정한 업데이트 내용이 DNS 서버에 적용됩니다.

윈도우에서 DNS 서버(BIND9)를 재시작하여 주는 방법에는 다음의 두 가지가 있습니다.

첫째, [시작]-[제어판]-[성능 및 유지관리]-[관리 도구]를 선택, [서비스]를 더블클릭하여 열린 서비스 창에서
ISC BIND 라는 이름의 서비스를 찾아 오른쪽 클릭, 단축메뉴에서 [다시 시작]을 선택하면 ISC BIND 서비스가
중지되었다가 다시 시작됩니다.

둘째, cmd 창에서 다음의 명령 실행에 의해서도 DNS 서버(BIND9)를 재시작 할 수 있습니다.
       net stop "ISC BIND" : DNS 서버(BIND9)의 중지
       net start "ISC BIND" : DNS 서버(BIND9)의 시작

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>net stop "ISC BIND"
ISC BIND 서비스를 잘 멈추었습니다.

C:\Documents and Settings\hats>net start "ISC BIND"
ISC BIND 서비스를 시작합니다..
ISC BIND 서비스가 잘 시작되었습니다.


C:\Documents and Settings\hats>_


[ nsupdate.exe를 이용한 개별도메인 zone 파일 설정 Update 하기 ]

nsupdate.exe를 이용하는 방법에 대해서는 설명을 생략하기로 하겠습니다.
처음에는 이 부분에 대한 설명도 하려고 했었지만 이 방법 역시 수동적인 방법에 속하고
DNS 서버에 대해서 익숙치 않은 분들에게는 오히려 혼란만 줄 것 같아서 과감히(?) 생략했습니다.^^;

꼭 알아야 겠다는 분들이 계시다면 댓글을 달아 주시거나
관련 전문 서적을 참고하시기 바랍니다.


위와 같이 수동으로 작업을 해 주어도 되지만 이러한 일련의 작업들 즉, 외부 인터넷 연결 IP 주소가 변경되었는지
부팅할 때 마다 검사하고, 변경되었으면 개별 도메인 설정 zone 파일인 jobdahan.dnip.net.zone 파일의 내용 중
설정되어 있는 IP Address만 수정시켜 저장한 후 그 zone 파일을 reload 해주게 할 수 있는 소프트웨어를 만들어
동작하게 하면 아주 유용하겠지요?

BIND9의 설정파일들을 생성하거나 IP Address를 업데이트하는 소프트웨어를
PHP나 Delphi, C++ 등으로 만들 수 있을 것입니다.

여러분들께는 윈도우 명령 셸을 이용하여 BIND9의 모든 설정 파일들을 쉽게 생성하고 IP Update를 할 수 있는 배치 파일
(BINDzSet.cmd)을 배포하도록 하겠습니다.


아래의 기능 소개를 읽어보시고 유용하다는 생각이 드시면 이 글의 댓글로

"BINDzSet.cmd 신청합니다."라고 반드시 신청한 다음에
쪽지 보내 주시기 바랍니다.

그런데요...
DNS 서버가 설치되지 않았다면 이 배치 파일은 아무 소용없지 않겠습니까?
그래서 현재 자신의 서버에 BIND9이 설치되어 있어서 서브 도메인이 설정된 분들께만 드리고자 합니다.
(현재 이 강좌를 통해 DNS 서버를 구축한 분들이 몇 분이나 되는지 파악하고 싶어서이니 널리 양해 해주시길!^^;)

배치 파일 신청 방법은 먼저 앞서 설명한 방법으로 댓글을 올리신 다음 자신의 FTP 서버에 사용자 계정을 하나 만들고
아래의 내용을 저(ID : hats)에게 쪽지로 보내 주시기 바랍니다.

 1) FTP 사용자 계정 ID와 Password( 예 : 아이디 named, Password 2345 )
 2) 접속할 FTP 주소( 예 : ftp.xxx.dnip.net )
 3) 접속할 수 있는 시간대( 예 : 18:00~19:00 )
(파일이 업로드된 것을 확인 후 FTP 계정은 삭제하거나 Password를 변경하시기 바랍니다.)

사용방법은 아래에도 설명되어 있지만 BINDzSet.cmd 파일을 시스템 Path를 지정해 놓았던
C:\APM_Setup\Server\DNS\bin\ 디렉터리에 넣은 다음 cmd 창을 열고 BINDzSet만 입력하십시오.
그러면 아래 내용과 같은 도움말이 나올 것입니다.

BINDzSet.cmd를 사용해 보시면 아시겠지만
명령 중 옵션 입력이 잘못되었을 때에는 그 상황에 맞는 도움말이 자세히 나오게 되어 작성되어 있습니다.
사용법을 익히시지 않더라도 도움말만 보면 쉽게 사용할 수 있을 것입니다.(저의 생각일 뿐...)

Windows OS에 DNS 서버(BIND9)을 설치한 후 설정 파일들을 만들어야 할 때
BINDzSet 명령 한 줄 입력할 때마다 입력한 설정 파일이 자동으로 만들어 질 것입니다.
그리고 곧 바로 그 설정 파일의 내용을 확인해 보실 수 있으며,
BIND9을 재시작시켜 변경 내용을 적용시킬 수 있습니다.

혹시, 좀 더 자세한 사용법 설명이 필요하시다면 댓글 달아 주십시오.
BINDzSet.cmd 사용법 설명 글 올리도록 하겠습니다.

BINDzSet.cmd는 여러분의 환경에 맞게 수정하시고 사용하셔도 됩니다.
단, 다른 곳에 올리지는 말아 주세요.-.-;
윈도우 명령 셸을 공부하시는데에도 도움이 될 것이라 여겨집니다.

앞에서 설명한 [ 직접 IP Update ]의 [2]와 [3] 항목은 BINDzSet.cmd를 사용한다면
다음과 같이 2번의 명령 실행으로 간단히 해결될 것입니다.

BINDzSet Dzone jobdahan.dnip.net 210.95.205.105 2007062015 shop
BINDzSet restart


배포 받는 과정이 귀찮으시다구요?
에~구!
그럼, 저도 할 수 없죠!^^;


[ BINDzSet 사용법 ]
*****************************************************************************************
  명령 형식 : BINDzSet [설정파일명] [HostName] [IP] [Serial] [subD1 [subD2...[subD5]]]
*****************************************************************************************
  ㅇ [설정파일명] : rndc, named.ca, localhost.zone, named.local, named.conf, Dzone 중 하나
  ㅇ [Host Name]  : 네임서버도메인(ns.ID.dnip.net)에서 "ns."을 제외한 이름 ID.dnip.net
  ㅇ [IP]         : 내 컴퓨터의 인터넷 연결 IP 주소  ex) 210.95.205.15
  ㅇ [Serial]     : 이 네임서버의 데이타 버전, 현재 년월일시간으로 정함  ex) 2007050101
  ㅇ subD1 subD2  : 설정할 서브도메인 이름(공백으로 구분해서 5개까지 추가 가능)
                     www, mail, ftp, pds, blog는 기본으로 설정됨  ex) shop cafe commu 등
---------------------------------------------------------------------------------------------------
[ 실행 예 ]
[1] rndc.key, rndc.conf 파일 생성하기
     BINDzSet rndc           ⇒rndc.key 파일과 rndc.conf 파일을 생성
     BINDzSet rndc view   ⇒ 생성되어 있는 rndc.key, rndc.conf 파일 내용 보기

[2] named.ca 파일 생성하기
     BINDzSet named.ca           ⇒ named.ca 파일을 생성
     BINDzSet named.ca view   ⇒ 생성되어 있는 named.ca 파일 내용 보기

[3] localhost.zone 파일 생성하기
     BINDzSet localhost.zone           ⇒ localhost.zone 파일을 생성
     BINDzSetlocalhost.zone view   ⇒ 생성되어 있는 localhost.zone 파일 내용 보기

[4] named.local 파일 생성하기
     BINDzSet named.local           ⇒ named.local 파일을 생성
     BINDzSet named.local view   ⇒ 생성되어 있는 named.local 파일 내용 보기

[5] named.conf 파일 생성하기
     BINDzSet named.conf ID.dnip.net           ⇒ named.conf 파일을 생성
     BINDzSet named.conf view                   ⇒ 생성되어 있는 named.conf 파일 내용 보기

[6] 개별도메인 Zone 파일 생성하기
     BINDzSet Dzone ID.dnip.net xxx.xxx.xxx.xxx 2007050215 shop cafe commu
          ⇒ "ID.dnip.net.zone"이라는 파일명을 갖는 개별도메인 Zone 파일을 생성
               xxx.xxx.xxx.xxx : 인터넷 연결 IP Address, 2007050215 : Serial,
               shop, cafe, commu : 생성시킬 2차 도메인(www, mail, ftp, pds, blog는 기본으로 생성됨)
     BINDzSet Dzone ID.dnip.net view     ⇒ 생성되어 있는 개별도메인 Zone 파일 "ID.dnip.net.zone"의 내용 보기

[ 부가 기능 ]
(1) 내 컴퓨터 인터넷 연결 IP 확인
     BINDzSet ipcheck

(2) BIND9 재 시작
     BINDzSet restart
---------------------------------------------------------------------------------------------------
[ 사용 환경 ]
 1. 이 파일의 이름은 BINDzSet.cmd 이며, Windows용 배치 파일이므로 cmd창에서 실행합니다.
 2. BINDzSet.cmd 파일과 bindzset 폴더를 시스템 Path가 설정되어 있는 C:/APM_Setup/Server/DNS/bin/
    디렉터리에 넣어두고 사용하십시오.
    - bindzset 폴더에는 named.root, Port_Check.exe 파일이 들어가 있어야 합니다.

 3. BIND9이 C:/APM_Setup/Server/DNS/ 디렉터리에 설치되어 있는 환경에 맞게 배치 파일 스크립트가
    작성되어 있으므로 환경이 다를 경우 BINDzSet.cmd를 수정하여 사용하면 됩니다.
    또한 C:/APM_Setup/temp/ 디렉터리도 사용하고 있음을 참고하십시오.
    물론 이 강좌의 내용대로 하셨다면 수정 없이 그대로 사용하시면 됩니다.
 4. BINDzSet의 실행하는 위치는 시스템 Path가 설정되어 있으므로 아무 디렉터리에서나 실행하면 됩니다.

http://jobdahan.net/server_window/17274


현재는 BIND9이 설치되면서 윈도우즈 서비스에 ISC BIND라는 이름으로 등록은 되어 있지만
실행이 되지 않고 있는 상태입니다. 이 ISC BIND 서비스를 시작시켜 주어야 Windows XP가 부팅되면서
named 데몬이 자동으로 실행되게 됩니다.
(Windows XP에서 BIND9의 프로세스 이름은 named.exe이며 서비스 이름은 ISC BIND입니다.)

[시작]-[제어판]-[성능 및 유지관리]-[관리 도구]를 선택하여 관리 도구 창이 열리면
그 곳에서 [서비스]를 더블클릭하여 서비스 창을 엽니다.

그 서비스 창에서 ISC BIND 라는 이름의 서비스(상태 필드에 “시작됨”이라는 글자가 표시되지 않은 상태입니다.)를 찾아
오른쪽 클릭하여 단축메뉴에서 [속성]을 선택하면 ISC BIND 속성 창이 열립니다.
(이 속성 창을 여는 경로를 잘 기억해 두시기 바랍니다.)

아래의 그림과 같이 ISC BIND 속성 창의 [로그온] 탭을 클릭합니다.

BIND9을 설치하면서 로그온 계정 이름을 named라 하고 암호를 입력했을 것입니다.
그렇기 때문에 현재는 .\named 사용자 계정으로 선택되어져 있습니다.

이 .\named 라는 사용자 계정을 다음의 방법으로 로컬 시스템 계정으로 변경시켜 주어야만
named 데몬을 시작할 수 있게 됩니다.

아래의 왼쪽 그림과 같이 .\named 사용자 계정으로 선택되어 있는 상태를 [로컬 시스템 계정]으로 변경시키고
반드시 [적용] 버튼을 클릭합니다. 적용이 되면 [적용] 버튼은 비활성화 상태로 표시됩니다.

그 다음 오른쪽 그림과 같이 [일반] 탭을 클릭하고 “서비스 상태 :”라는 글자 바로 아래에 있는 [시작] 버튼을 클릭합니다.
서비스를 시작 상태를 나타내는 아래와 같은 서비스 제어 창이 열렸다가 자동으로 닫힐 것입니다.

서비스 제어 창이 닫히고 [시작] 버튼이 비활성화 상태가 되면 [ISC BIND 서비스]가 시작된 것입니다.

만약, 아래 그림과 같은 메시지가 나오면서 ISC BIND가 시작되지 않을 경우
[로그온] 탭에서 로컬 시스템 계정으로 변경시킨 다음 [적용] 버튼을 누르지 않은 채로 [일반] 탭에서 [시작] 버튼을
눌렀기 때문입니다.(저는 이 것 때문에 스트레스 엄청 받았었는뎅... 여러분들은 저 같은 실수 안 하시겠죠?)


이제 지속적인 서비스 실행이 되었으니 [확인] 버튼을 눌러 ISC BIND 속성 창을 닫고,
서비스 창에서 ISC BIND가 서비스되고 있는 상황을 보면
아래 그림과 같이 “시작됨”, “로컬 시스템”이라는 글자가 보일 것입니다.

[Ctrl+Alt+Del] 키를 눌러서 Windows 작업관리자 창의 [프로세스] 탭에서도 확인할 수 있습니다.
Windows 작업관리자 창의 프로세스 탭에서 named.exe라는 프로세스가 보일 것입니다.


현재 DNS 서버가 구동되어 네임 서비스를 하고 있는 중이며,
다음부터는 부팅하게 되더라도 자동으로 ISC BIND 서비스가 시작될 것입니다.
즉, DNS 서버가 동작하게 된다는 말이 되겠지요?


이제 ISC BIND를 서비스로 등록했으므로 실제 동작을 확인하기 위해서 서버 컴퓨터를 재부팅하여
다시 동작을 확인해 보도록 하십시오.

[6. BIND9 동작 테스트]의 3) 네임서버 질의 명령어 nslookup으로 확인, 4) ping 명령으로 전송 응답 테스트 과정을
다시 시도하여 마무리 동작 테스트하시길 바랍니다.


드디어 Windows XP에 DNS 서버(BIND9)을 모두 설치하고 설정한 다음
정상적인 동작까지 될 수 있도록 서비스 등록까지 하여
네임서버를 구동시켰으며 현재 네임 서비스를 하고 있는 중입니다.

http://jobdahan.net/server_window/17272


DNS 서버인 BIND9을 본격적으로 구동시키기에 앞서 지금까지 설치/설정한 모든 사항들이 실제적으로 정상적인
동작을 하고 있는지 테스트 해 볼 것입니다.

DNS 서버의 데몬(named.exe)을 명령 창(cmd)에서 임시 실행시켜서 에러 유무 확인,
프로세스 창에서 실행된 데몬 확인,
네임서버 질의 명령어 nslookup으로 서브 도메인의 IP 주소 확인 및 ping 명령어로 전송 응답 테스트를 하여
DNS 서버(BIND9의 named)가 정상적으로 동작하고 있는지 확인합니다.


 1) 명령 창(cmd)에서의 named.exe 실행

   C:\APM_Setup\Server\DNS\bin\ 디렉터리에 named.exe 파일이 있는데
   그 디렉터리는 미리 Path를 설정해 주었으므로 cmd 창에서 현재 디렉터리를 이동시키지 않고
   곧 바로 named.exe를 실행할 수 있습니다.

   [시작]-[실행]-cmd 입력하여 cmd 창을 열어서 named.exe -g 라는 명령어를 입력하고 Enter 키를 치면
   아래와 같은 실행 상태가 보여 지고 C:\Documents and Settings\hats>라는 프롬프트가 표시되지 않은 채
   맨 아래에 커서가 깜박거리면서 named 데몬이 실행됩니다.

명령 프롬프트(cmd) 창(에러없이 실행된 예)

C:\Documents and Settings\hats>named -g

30-4-2007 13:58:28.986 starting BIND 9.4.0 -g
30-4-2007 13:58:29.002 found 2 CPUs, using 2 worker threads
30-4-2007 13:58:29.002 loading configuration from 'C:\APM_Setup\Server\DNS\etc\named.conf'
30-4-2007 13:58:29.002 listening on IPv4 interface Loopback Interface 1, 127.0.0.1#53
30-4-2007 13:58:29.002 listening on IPv4 interface TCP/IP Interface 2, 192.168.2.12#53
30-4-2007 13:58:29.017 automatic empty zone: 127.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 254.169.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 2.0.192.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 255.255.255.255.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
.0.0.0.0.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
.0.0.0.0.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: D.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 8.E.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 9.E.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: A.E.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: B.E.F.IP6.ARPA
30-4-2007 13:58:29.033 command channel listening on 127.0.0.1#953
30-4-2007 13:58:29.033 ignoring config file logging statement due to -g option
30-4-2007 13:58:29.049 zone 0.0.127.in-addr.arpa/IN: loaded serial 1997022700
30-4-2007 13:58:29.049 zone localhost/IN: loaded serial 42
30-4-2007 13:58:29.049 zone jobdahan.dnip.net/IN: loaded serial 2007042710
30-4-2007 13:58:29.049 running
_

   실행 상태를 보고 에러가 있는지 확인합니다. 만약 에러가 있으면 그 메시지를 확인하시고 설정 파일을 꼼꼼히 확인해 주시기
   바랍니다. 위의 경우는 에러가 없이 실행된 상태의 한 예입니다.

   [주의] 이 때 cmd 창을 닫으면 named 데몬의 실행이 중지되어 버립니다.
              그러므로 동작 테스트가 끝날 때까지 반드시 cmd 창을 닫지 않도록 합니다.
              커서가 깜박거리고 있는 그대로 그냥 놔 두십시오.^^;

   [참고] 분명 모든 구문을 이상 없이 입력해 주었는데도 zone 파일을 정상적으로 읽어 들이지 못해 동작이 되지 않는 경우가
   있을 수 있습니다. 아마 텍스트 에디터로 편집하면서 파일의 끝에 들어가는 보이지 않는 코드 때문이지 않았는지 짐작만 할
   뿐입니다. 그렇지만 스트레스는 받지 마십시오. 해결 방법이 없겠습니까?

   아래와 같은 에러 메시지가 나올 경우에는 해당되는 파일을 아예 삭제하시고,
   에러난 파일을 이번에는 메모장을 이용하여 처음부터 다시 입력하여 만드시길 바랍니다.

named.local:11: file does not end with newline
dns_rdata_fromtext: jobdahan.dnip.net.zone:17: unexpected end of input
one jobdahan.dnip.net/IN: loading from master file jobdahan.dnip.net.zone failed: unexpected end of input

   저도 처음 DNS 서버 구축할 때 이 것 때문에 스트레스 엄청 받았습니다.
   혹시라도 설정 파일 내용을 이상 없이 입력했는데도 에러 메시지가 나올 경우 댓글로 에러 메시지와 함께
   에러가 발생된 설정파일 내용도 올려 주시면 같이 해결해 보기로 하겠습니다.


 2) named 데몬 프로세스 확인

   에러가 없을 경우 [Ctrl+Alt+Del] 키를 눌러서 Windows 작업관리자 창을 연 다음
   [프로세스] 탭을 클릭하여 아래 그림과 같이 named.exe가 실행되고 있는지 확인합니다.


 3) 네임서버 질의 명령어 nslookup으로 확인

   named 데몬이 동작되고 있음을 확인했으니 네임서버 질의 명령어(nslookup)를 이용해서
   서브 도메인의 IP 주소를 확인해 볼 차례입니다.

   [시작]-[실행]-cmd 입력하여 cmd 창을 하나 더 열어 놓습니다.
   (왜냐구요? 아까 열어 놓았던 cmd 창은 named 데몬을 실행 중인데 그 창에서 다른 명령을 실행시키기 위해 프롬프트가
    나오게 하려면 named를 중지시켜야 하고, 글케되믄 named 동작을 확인해 볼 수 없게 되기 땜시...)

   새로 열린 cmd 창에서 아래와 같이 nslookup[Enter]을 입력하여 nslookup 모드로 들어갑니다.
   프롬프트가>로 바뀌었을 것입니다.

   이제 생성시킨 서브 도메인들을 각각 입력하여 질의 했을 때 IP 주소가 표시되면
   그 주소가 위에서 작성했던 zone 파일인 jobdahan.dnip.net.zone에서 설정했던 주소인지 확인합니다.
   210.95.205.15 이면 정상적으로 잘 설정되어 동작되고 있는 것입니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>nslookup
Default Server:  cns3.bora.net
Address:  203.248.252.2

www.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    www.jobdahan.dnip.net
Address:  210.95.205.15

jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    jobdahan.dnip.net
Address:  210.95.205.15

mail.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    mail.jobdahan.dnip.net
Address:  210.95.205.15

ftp.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    ftp.jobdahan.dnip.net
Address:  210.95.205.15

shop.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    shop.jobdahan.dnip.net
Address:  210.95.205.15

exit
C:\Documents and Settings\hats> _

   확인이 끝났으면 exit 명령으로 nslookup 모드를 빠져 나옵니다.


 4) ping 명령으로 전송 응답 테스트

   이 번에는 설정된 도메인으로 패킷 데이터(Packet Data)를 보내고 그 응답 상태를 확인하기 위해 방금 nslookup 명령을
   사용했던 cmd 창에서 ping 서브도메인[Enter]의 명령 형식으로 각 도메인들을 테스트합니다.
   nslookup으로 확인이 잘 되었다면 ping 테스트 결과도 정상적일 것입니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>ping jobdahan.dnip.net

Pinging jobdahan.dnip.net [210.95.205.15] with 32 bytes of data:

Reply from 210.95.205.15: bytes=32 time=1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255

Ping statistics for 210.95.205.15:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 1ms, Average = 0ms

C:\Documents and Settings\hats>ping www.jobdahan.dnip.net

Pinging www.jobdahan.dnip.net [210.95.205.15] with 32 bytes of data:

Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255

Ping statistics for 210.95.205.15:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\Documents and Settings\hats>ping shop.jobdahan.dnip.net

Pinging shop.jobdahan.dnip.net [210.95.205.15] with 32 bytes of data:

Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255

Ping statistics for 210.95.205.15:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\Documents and Settings\hats> _

   ping 검사 결과 모두 Packets: Sent = 4, Received = 4, Lost = 0 (0% loss) 임을 알 수 있습니다.
   즉, 4개의 패킷 데이터를 보내서 4개 모두 받아 손실이 0 이라는 의미입니다.

   여기의 예에서는 3개 도메인에 대해서만 확인해 보았지만 여러분들은 설정한 서브 도메인 모두 확인해 보시기 바랍니다.


이제 DNS 서버(BIND9)의 동작 확인이 끝났으니 cmd 창을 두 개 모두 닫아도 좋습니다.
named가 실행되었던 cmd 창을 닫은 다음
Windows 작업관리자 창의 [프로세스] 탭을 보면 named 데몬의 실행이 중지되어 사라지고 없음을 알 수 있습니다.


자, 지금까지의 작업이 순조롭게 잘 되었습니까?

혹시라도 문제가 있으면 글을 올려 주시기 바랍니다.

작업이 잘 되었다면 이제는 임시가 아닌 정상적인 서비스가 되게 설정할 차례입니다.

 설정 파일의 마지막으로 개별 도메인에 대한 zone 파일을 만들어 주어야 합니다.
 만들 zone 파일의 이름은 zone "jobdahan.dnip.net"에서 정의한 zone 이름(Zone Name)에 “.zone"을 붙여 주는 것이
 일반적인 방법입니다.

 물론 이 zone 파일 역시 \etc 디렉터리 즉, C:\APM_Setup\Server\DNS\etc\ 디렉터리에 위치하고 있어야 합니다.
 named.conf 파일의 options 블록에서 directory "C:\APM_Setup\Server\DNS\etc";로 정의했기 때문이지요.

 바로 이 zone 파일에서 실제 사용하게 되는 도메인과 서브 도메인들을 설정해 주게 됩니다.
 도메인 설정의 핵심이라고 할 수 있겠지요?
 그래서 이 부분은 조금 더 자세하게 설명하기로 하겠습니다.

 앞에서 설명한 named.conf 파일의 맨 아래 부분에 다음과 같은 zone 블록이 있었을 것입니다.

zone "jobdahan.dnip.net" IN {
 type master;
 file "jobdahan.dnip.net.zone";
 allow-update { none; };
};


 위의 구문에서 file "jobdahan.dnip.net.zone";은 jobdahan.dnip.net.zone 파일로 네임 서비스를 하겠다는 설정이므로
 아래의 설명과 같은 내용의 jobdahan.dnip.net.zone 파일을 만들어 주어야 합니다.

[ 예 1] C:\APM_Setup\Server\DNS\etc\jobdahan.dnip.net.zone 파일의 내용

$TTL 43200
@    IN    SOA    ns.jobdahan.dnip.net.    root.jobdahan.dnip.net. (
                        2007042710  ; 시리얼 값 (년월일시간)으로 대부분 셋팅
                        3H              ; 2차 네임서버가 1차 네임서버에 접속하는 시간
                        15M            ; 접속 실패 시 다시 시도할 시간 간격
                        1W              ; 1차 네임서버에서 데이터가 없다면 1주 이후에 지워진다.
                        1D )            ; 위에서 설정한 TTL 값과 같은 의미
;
; Name Server
      IN     NS      ns.jobdahan.dnip.net. ; 도메인을 소유한 DNS의 도메인
      IN     MX 10  mail.jobdahan.dnip.net. ; 메일을 보낼 도메인 또는 주소
      IN     A         210.95.205.15  ; 도메인이 찾아갈 IP 주소
;
; Host name
ns   IN    A         210.95.205.15  ;
;
; Virtual Host
www    IN    A   210.95.205.15  ; www.도메인이 찾아갈 IP주소
mail     IN    A   210.95.205.15  ; 메일서버 아이피
ftp        IN    A   210.95.205.15  ; FTP서버 아이피
*          IN    A   210.95.205.15  ; 모든 서브 도메인이 찾아갈 서버 ip 주소

 다음은 위의 내용에 대한 설명입니다.

  a) SOA ns.jobdahan.dnip.net. : 해당 도메인(ORIGIN : jobdahan.dnip.net)에 대하여 이 곳에 설정한 네임서버
     (ns.jobdahan.dnip.net : DNIP 사이트에서 무료 서비스 받은 도메인)가 모든 정보를 가지고 있음을 선언하고 있습니다.
     도메인 끝 부분에 마침표 “.”을 붙이고 있는 것에 유의하십시오.

  b) root.jobdahan.dnip.net. :  jobdahan.dnip.net이라는 도메인의 관리자 Email 주소에 해당합니다.
     이 구문은 root@jobdahan.dnip.net을 의미하는 것으로 @기호 대신에 .(dot)을 사용하여
     root.jobdahan.dnip.net.으로 입력합니다.

  c) IN NS ns.jobdahan.dnip.net.;
     해당 도메인(jobdahan.dnip.net)의 네임서버(ns.jobdahan.dnip.net)를 지정하는 곳입니다.

  d)IN MX 10 mail.jobdahan.dnip.net.;
     MX는 Mail eXchanger의 약어로서 해당 도메인(jobdahan.dnip.net)의 메일서버를 지정하는 곳입니다.
     (지금은 메일서버가 구축되어 있지 않아 이 부분은 삭제해도 되지만 나중에 메일서버를 사용하게 될 때에는
     삽입하여야 합니다.)

  e) IN A 210.95.205.15 ;
    해당 도메인(jobdahan.dnip.net)의 IP 주소가 210.95.205.15(자신의 컴퓨터 외부 인터넷 연결 IP 주소)임을 설정합니다.

  f) ns IN A 210.95.205.15 ;
    ns.jobdahan.dnip.net의 IP 주소가 210.95.205.15임을 설정합니다.

  g) 서브 도메인 설정 ~ 각 서브 도메인들에 해당하는 IP 주소를 설정합니다.

www     IN    A     210.95.205.15 ;
mail      IN    A     210.95.205.15 ;
ftp         IN    A     210.95.205.15 ;
*           IN    A     210.95.205.15 ;

ㅇ www IN A 210.95.205.15; : www.jobdahan.dnip.net의 IP 주소가 210.95.205.15 임을 설정합니다.

ㅇ mail  IN A 210.95.205.15; : mail.jobdahan.dnip.net의 IP 주소가 210.95.205.15 임을 설정합니다.
    (이 부분은 현재 메일서버를 사용하고 있지 않으므로 사용하지 않을 것이지만 나중에 메일서버를 사용하게 될 때에는
     삽입하여야 합니다.)

ㅇ ftp  IN A 210.95.205.15; : ftp.jobdahan.dnip.net의 IP 주소가 210.95.205.15 임을 설정합니다.
    (이 부분 역시 반드시 들어가야 할 부분은 아니며 ftp.jobdahan.dnip.net이라는 도메인이 필요할 경우에 삽입하면
     됩니다.)

ㅇ *   IN A 210.95.205.15; : 앞에서 정의하지 않은 나머지 모든(*) 서브 도메인들의 IP 주소가 210.95.205.15임을 설정합니다.
    이 방법은 특정 이름의 도메인이 정해지지 않았을 경우 무조건 기본 도메인으로 사용하고 있는 jobdahan.dnip.net으로
    매핑(mapping) 처리되도록 한다든지, 또는 오타로 인한 도메인은 특정 도메인으로 처리하도록 할 때에 유용한 방법이
    될 수 있을 것입니다.(여기에서는 사용하지 않도록 하겠습니다.)

  위의 설명을 참고하여 자신의 환경에 맞게 내용을 메모장이나 텍스트 에디터로 작성한 다음 이 파일 역시 다른 zone 파일들이
  있는 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 jobdahan.dnip.net.zone 이라는 파일명으로 저장합니다.
  (작성할 때 아래의 [예 2] 내용을 샘플로 하시기 바라며, 주홍색 글자만 수정하시면 될 것입니다.)

  [작성 시 주의사항]  1. 도메인 뒤에 붙어 있는 .(점)을 필히 입력하시고,
                              2. 모든 공백 라인은 “;” 문자로 주석 처리하시길 바랍니다.

  여기에서는 ORIGIN 인 jobdahan.dnip.net을 비롯하여 www.jobdahan.dnip.net, mail.jobdahan.dnip.net,
  ftp.jobdahan.dnip.net, shop.jobdahan.dnip.net이라는 jobdahan.dnip.net의 서브 도메인들을 생성하게 하는
  jobdahan.dnip.net.zone 파일 작성하는 예를 들어 보겠습니다.

[ 예 2] C:\APM_Setup\Server\DNS\etc\jobdahan.dnip.net.zone 파일의 내용

$TTL 43200
@            IN    SOA       ns.jobdahan.dnip.net.    root.jobdahan.dnip.net. (
                                   2007042710  ; 시리얼 값 (년월일시간)으로 대부분 셋팅
                                   3H  ; 2차 네임서버가 1차 네임서버에 접속하는 시간
                                   15M  ; 접속 실패 시 다시 시도할 시간 간격
                                   1W  ; 1차 네임서버에서 데이터가 없다면 1주 이후에 지워진다.
                                   1D )  ; 위에서 설정한 TTL 값과 같은 의미
; Name Server
              IN     NS     ns.jobdahan.dnip.net. ; 도메인을 소유한 DNS의 도메인
              IN     A       210.95.205.15  ; 도메인이 찾아갈 IP 주소
; Host name
ns           IN    A        210.95.205.15  ;
; Virtual Host
www       IN    A       210.95.205.15  ; www.도메인이 찾아갈 IP주소
mail        IN    A       210.95.205.15  ; mail.도메인이 찾아갈 IP주소
ftp           IN    A       210.95.205.15  ; ftp.도메인이 찾아갈 IP주소
shop       IN    A       210.95.205.15  ; shop.도메인이 찾아갈 IP주소


 [ 개별도메인 zone 파일의 유효성 검사(zone file validity checking) ]

  BIND9의 동작 테스트를 하기 전에 먼저 etc 디렉터리에 있는 jobdahan.dnip.net.zone 파일이 유효한지 검사해 보기로
  하겠습니다.

  이 작업은 DNS 서버 구축의 성공 여부를 가늠할 수 있는 마지막 과정이기 때문에 이 검사에서 에러 메시지가
  하나도 나오지 않아야만 합니다.
 만약 에러 메시지가 나오면 그 에러메시지 내용을 잘 살펴본 후 반드시 그 부분을
  해결하시기 바랍니다.

  [시작]-[실행]-cmd 입력하여 cmd 창을 열고, 현재의 디렉터리를 C:\APM_Setup\Server\DNS\etc\ 디렉터리로
  이동시킨 후 다음 형식과 같은 명령을 입력합니다.

형식 : named-checkzone {zonename} {filename}

  예) named-checkzone  jobdahan.dnip.net  jobdahan.dnip.net.zone

아래와 같이 에러 메시지가 없이 표시되면 모든 설정이 잘 되었음을 나타냅니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>cd\APM_Setup\Server\DNS\etc[Enter]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone[Enter]
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK

C:\APM_Setup\Server\DNS\etc>

다음은 에러 메시지의 예입니다. 참고하시기 바랍니다.

에러 메시지 [예 1]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone
zone jobdahan.dnip.net/IN: NS 'ns.jobdahan.dnip.net.jobdahan.dnip.net' has no address records (A or
AAAA)
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK
[설명] IN NS ns.jobdahan.dnip.net 구문에서 끝부분에 점(.)이 없기 때문에 표시되는 메시지

에러 메시지 [예 2]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone
zone jobdahan.dnip.net/IN: NS 'ns.jobdahan.dnip.net' has no address records (A or AAAA)
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK
[설명] ns IN A 210.95.205.15 ; 라는 구문이 없기 때문에 표시되는 메시지

에러 메시지 [예 3]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone
jobdahan.dnip.net.zone:20: pc_book.jobdahan.dnip.net: bad owner name (check-names)
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK
[설명] zone 파일의 20번 행에서 pc_book IN A 210.95.205.15 ;이라 설정하여 서브 도메인 이름으로 사용할 수 없는 언더바(underbar, “_”)를 사용했기 때문에 표시되는 메시지. 하이픈(hyphen, "-")은 사용 가능함


이제 마지막 설정 파일인 jobdahan.dnip.net.zone 파일이 추가 되었습니다.
C:\APM_Setup\Server\DNS\etc\ 디렉터리에 모두 7개의 설정 파일들이 있을 것입니다.

수고 많이 하셨습니다...!

 a) named.ca 파일 만들기

   강좌 첫 부분 DNS 개념에서 설명했듯이 모든 네임서버는 반드시 최상위 도메인인 루트도메인에 대한 정보를
   가지고 있어야 하는데 바로 named.ca 파일에 루트도메인에 대한 정보가 들어가 있어야 합니다.

   아래 링크된 INTERNIC 사이트에 접속해 보면 여러 개의 파일들이 보이는데, 그 중에서 루트도메인에 대한 정보가
   들어가 있는 named.root 파일만을 다운로드하여 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 저장 한 뒤에
   파일명을 named.ca로 바꾸어주면 됩니다.(클릭한 뒤 쪼께 기다리셔야 창이 열립니다...-.-;)

루트도메인파일 다운로드 링크 : ftp://ftp.rs.internic.net/domain/

   루트도메인 파일(named.root => named.ca)은 1년에 2번 정도 위의 URL에서 다운받아 업그레이드 해주는 것이 좋습니다.


 b) localhost.zone 파일 생성

   localhost라는 도메인의 IP 주소는 127.0.0.1임을 설정한 파일로써
   이 주소는 외부가 아닌 내부 즉, 자기 자신을 가리키는 것으로써 루프 백(loop-back)을 의미합니다.
   각 지시자들과 항목들에 대한 자세한 설명은 리눅스 전문서적의 도메인네임서버 항목을 참고하시기 바랍니다.

   어느 네임서버에서나 localhost는 127.0.0.1이라는 IP 주소를 가리켜야 하므로 아래의 내용과 똑같이 입력하여
   localhost.zone 파일을 작성하면 됩니다.

   작성을 마친 다음 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 localhost.zone 이라는 파일명으로 저장합니다.

C:\APM_Setup\Server\DNS\etc\localhost.zone 파일의 내용

$TTL 86400
@    IN   SOA     @       root (
       42          ; serial (d. adams)
       3H         ; refresh
       15M       ; retry
       1W         ; expiry
       1D )       ; minimum

       IN    NS     @
       IN    A       127.0.0.1


 [ localhost.zone 파일의 유효성 확인 ]

   파일 내용 입력 과정에서 실수하지 않았는지 named-checkzone.exe 유틸리티를 이용하여
   내용의 유효성을 검사해 보기로 합니다.

   cmd 창을 열고 cd 명령으로 현재 디렉터리를 유효성 검사 대상 파일 localhost.zone이 있는
   C:\APM_Setup\Server\DNS\etc로 이동시킨 후 아래와 같은 명령으로 localhost.zone 파일의 유효성을 검사합니다.


   현재 디렉터리를 \etc 디렉터리로 이동시키는 명령 cd C:\APM_Setup\Server\DNS\etc(Enter)

   ( 현재 디렉터리를 \etc 디렉터리로 이동시키지 않으면 localhost.zone 파일이 존재하고 있는 경로를 다음과 같이 명령에
     포함시켜 입력해야 되겠지요?
     C:\Documents and Settings\hats>named-checkzone localhost C:\APM_Setup\Server\DNS\etc\localhost.zone )

   다른 에러 메시지가 나오지 않고 아래와 같이 표시되면 정상적으로 잘 작성되었음을 나타냅니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>cd C:\APM_Setup\Server\DNS\etc

C:\APM_Setup\Server\DNS\etc>named-checkzone localhost localhost.zone
zone localhost/IN: loaded serial 42
OK


 c) named.local 파일 생성

   localhost 도메인의 Inverse Domain에 대한 정보를 설정한 파일로써
   IP 127.0.0.1은 localhost 도메인을 가리키게 설정하고 있습니다.
   각 지시자들과 항목들에 대한 자세한 설명은 리눅스 전문서적의 도메인네임서버 항목을 참고하시기 바랍니다.

   이 파일 역시 별도로 수정할 필요가 없으며, 이 내용 그대로 입력하여 작성한 뒤
   C:\APM_Setup\Server\DNS\etc\ 디렉터리에 named.local 이라는 파일명으로 저장합니다.
   (주의 : localhost 뒤에 있는 “.”을 반드시 넣도록 하십시오.)

C:\APM_Setup\Server\DNS\etc\named.local 파일의 내용

$TTL  86400
@    IN    SOA        localhost.    root.localhost. (
                            1997022700 ; Serial
                            28800         ; Refresh
                            14400         ; Retry
                            3600000      ; Expire
                            86400 )       ; Minimum
       IN      NS        localhost.

1     IN      PTR       localhost.


[ named.local 파일의 유효성 확인 ]

  cmd 창을 열고 cd 명령으로 현재 디렉터리를 C:\APM_Setup\Server\DNS\etc로 이동시킨 후
  다음과 같은 명령으로  named.local 파일의 유효성을 검사합니다.

  아래와 같이 표시되면 정상적으로 잘 작성되었음을 나타냅니다.

명령 프롬프트(cmd) 창

C:\APM_Setup\Server\DNS\etc>named-checkzone named.local named.local
zone named.local/IN: loaded serial 1997022700
OK


   이제 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 named.ca, localhost.zone, named.local 파일 3개가 추가되어
   6개가 되었을 것입니다.

   앞으로 개별 도메인 설정 zone 파일(예 : jobdahan.dnip.net.zone) 1개만 더 만들면 됩니다.

'Programming > tool' 카테고리의 다른 글

06) BIND9 동작 테스트  (0) 2010.03.19
05) 개별 도메인 zone 파일 만들기  (1) 2010.03.19
03) named.conf 파일 만들기  (0) 2010.03.19
02) [DNS for XP] BIND9에서 named.conf, zone 파일 설정  (0) 2010.03.19
01) XP에 DNS 설치  (0) 2010.03.19

 named.conf 파일은 DNS 서버 데몬인 named의 기본 설정 파일입니다.

 즉, 각종 설정 파일들이 어디에 있는지,
 rndc로 named 제어를 허용 할 것인지 여부와 key 값은 어떻게 되는지,
 루트도메인(.)들을 지정하고 있는 파일은 무엇인지,
 localhost의 IP 주소를 지정한 파일은 무엇인지,
 또 127.0.0.1이 가리키는 도메인을 설정한 파일은 무엇인지,
 하부 도메인(서브 도메인)들이 가리키고 있는 IP 주소를 지정한 파일은 무엇인지를
 기록해둔 파일입니다.

 이 파일은 rndc.key, rndc.conf 파일과 같이 자동 생성되는 것이 아니라
 여러분이 사용하고자 하는 네임서버의 용도에 맞게 메모장이나 텍스트 에디터를 이용하여 직접 만들어 주어야 합니다.

아래의 named.conf 파일 샘플을 참고하여 메모장이나 텍스트 에디터(Edit Plus, Ultra Edit 등)로
자신의 컴퓨터 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 named.conf 파일을 만들기 바랍니다.
이 때 유의할 점은 공백 한 자만을 제외하고 두 자 이상은 탭(Tab) 키를 이용하여 입력하시기 바라며 주석문은 // 입니다.

한글로 설명된 주석 부분(청색 글자)은 모두 입력하지 마시고, 주홍색 글자만 자신의 환경에 맞게 수정하고
나머지는 그대로 입력하시면 됩니다.
.(dot), ;(semicolon) 하나라도 잘못 입력하면 에러가 발생하게 되니 유의해서 작성하시기 바랍니다.

C:\APM_Setup\Server\DNS\etc\named.conf 파일의 내용

options {
 directory "C:\APM_Setup\Server\DNS\etc";       // 네임서버의 zone 파일들이 위치한 경로
};

controls {
 inet 127.0.0.1 allow { localhost; } keys { rndc-key; };    // 로컬(localhost, 127.0.0.1)에서 인증키(rncd-key)를 이용해
};                                                                             // named 데몬 제어를 허용한다는 설정

zone "." IN {
 type hint;
 file "named.ca";                            // 이 네임서버의 루트도메인(.)에 대한 정보는 named.ca라는 파일에 있다는 설정
};                                                   // 그러므로 위의 directory에서 지정한 경로에 named.ca 파일이 존재해야 됨

zone "localhost" IN {
 type master;
 file "localhost.zone";                // 이 네임서버의 localhost 도메인에 대한 정보는 localhost.zone 파일에 있다는 설정
 allow-update { none; };               // etc 디렉터리에 localhost.zone 파일이 존재해야 됨
};

zone "0.0.127.in-addr.arpa" IN {
 type master;
 file "named.local";                    // localhost의 Inverse Domain에 대한 정보는 named.local 파일에 있다는 설정
 allow-update { none; };               // named.local 파일 역시 /etc 디렉터리에 존재해야 됨
};

include "C:\APM_Setup\Server\DNS\etc\rndc.key";
                                                 // rndc.key 파일이 존재하고 있는 경로와 파일명

zone "jobdahan.dnip.net" IN {   // 여기에서 jobdahan.dnip.net은 zone Name 에 해당하며, zone Name은
 type master;                              // www.dnip.net 사이트에서 무료 서비스 받은 도메인에서 ns를 제외한 도메인 명
 file "jobdahan.dnip.net.zone";
                                       // 서비스 받고 있는 도메인에서 ns를 제외하고 확장자로 .zone을 붙인 명칭 사용이 일반적임
                                       // jobdahan.dnip.net.zone 파일을 zone 파일로 하여 네임서비스를 하겠다는 설정
 allow-update { key "rndc-key"; };
};                                    //rndc-key 값으로jobdahan.dnip.net.zone 파일의 업데이트를 허용하겠다는 설정 



[ named.conf 파일의 문법 확인 ]

자, 이제 named.conf 파일을 다 작성하였으니 문법에 틀림이 없는지 검사해 봅시다.

이 문법이 틀리면 DNS 서버가 아예 동작하지 않게 됩니다. 그 만큼 중요한 것이므로 문법 검사하는 툴(tool)까지 있는 것
아니겠습니까?

named.conf 내용의 문법을 검사해주는 유틸리티는 C:\APM_Setup\Server\DNS\bin\named-checkconf.exe 파일
입니다. 검사하는 방법은 아래와 같으며, 이상이 있을 때만 잘못된 곳을 알려주는 메시지가 표시되고 이상이 없을 때는
아무런 표시가 되지 않습니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>named-checkconf C:\APM_Setup\Server\DNS\etc\named.conf

C:\Documents and Settings\hats>_

(named.conf 파일의 문법이 틀리지 않았을 경우 임)


에러 메시지가 표시되면 그 내용에 따라 named.conf 파일을 수정하고, 아무런 표시가 없을 때까지 검사합니다.

[ 에러 메시지 예 ]

C:\APM_Setup\Server\DNS\etc>named-checkconf named.conf
named.conf:35: missing ';' before end of file

named.conf 파일의 35행 문장 끝에 ';'이 없다는 메시지입니다.
즉,
 allow-update { key "rndc-key"; };
}
으로 되어 있다는 내용이므로 }를 }; 로 수정하고 다시 검사해 봅니다.

C:\APM_Setup\Server\DNS\etc>named-checkconf named.conf
named.conf:7: unknown key 'rndckey'

named.conf 파일의 7행에 입력되어 있는 rndckey 키를 알 수 없다는 메시지입니다.
rndc.key 파일의 내용을 확인해 보면 key 이름이 key "rndc-key"로 정의되어 있음을 알 수 있습니다.
named.conf의 7행 inet 127.0.0.1 allow { localhost; } keys { rndckey; };의 rndckey를 rndc-key로 수정하고
다시 검사해 봅니다.


이제 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 rndc.key, rndc.conf, named.conf 파일 3개가 되었을 것입니다.
앞으로 4개의 파일이 더 있어야 합니다.

 named.ca
========================================================
ftp://ftp.rs.internic.net/domain으로 접속한다.
named.cache 파일을 받아서 확장자를 named.ca로 바꿔준다.
접속이 잘 되지 않으면 첨부 파일을 사용한다.

named.zip - Last update : 2004년 01월 28일 ← 첨부파일========================================================

☆ named.conf
- 빨간색 부분을 변경하여 저장
========================================================
options {
directory "c:\dns\etc"; <- 설치 경로명
};

zone "." IN {
type hint;
file "named.ca"; 
};
zone "localhost" IN {
type master;
file "scmlab.zone";
allow-update {none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update {none; };
};
key "key" {
algorithm hmac-md5;
secret "+vjvsrwnJ54fRgQjDqxe+A=="; <-rndc.key 에서 생성 된 값 입력
};
zone "scmlab.com" IN {  <-자신이 사용할 도메인 이름 저는 scmlab.com 으로 설정
type master;
file "scmlab.zone";
allow-update {none ;};
};
zone "24.241.203.in-addr.arpa" IN { <-IP주소 ex; 203.241.24.78 인 경우
type master;
file "scmlab.rev";   <- 도메인 이름
allow-update {none; };
};
========================================================


☆ named.local
- default 값으로 저장
========================================================
$ORIGIN .
$TTL 1D
localhost 86400 IN SOA localhost. local.localhost. (
    2001061401 ;Serial
    28800  ;Refresh (8 hours)
    7200  ;Retry (2 hours)
    604800  ;Expire (1 week)
    86400  ;Minimum (1 day)
                                )
IN NS localhost.     
IN A 127.0.0.1
========================================================


☆ scmlab.zone
- 빨간색 부분을 변경하여 자신의 도메인 이름.zone으로 저장
========================================================
$TTL 43200
@  IN SOA ns.scmlab.com. root.scmlab.com.(     <- 자신의 도메인명, 끝에 콤마 주의
   20010504 ;Serial
   10800  ;Refresh
   3600  ;Retry
   3600000  ;Expire
   43200 )  ;Minumum
IN NS ns.scmlab.com<- 자신의 도메인명, 끝에 콤마 주의
IN A 203.241.24.78 <-IP주소 ex; 203.241.24.78 인 경우
IN HINFO "Intel Pentium" "Windows XP"
ns  IN A 203.241.24.78 <-IP주소 ex; 203.241.24.78 인 경우
www  IN A 203.241.24.78 <-IP주소 ex; 203.241.24.78 인 경우
========================================================


☆ scmlab.rev
빨간색 부분을 변경하여 자신의 도메인 이름.rev으로 저장
========================================================
$TTL 43200
@  IN SOA ns.scmlab.com. root.scmlab.com.(    <- 자신의 도메인명, 끝에 콤마 주의
   20010504 ;Serial
   10800  ;Refresh
   3600  ;Retry
   3600000  ;Expire
   43200 )  ;Minumum
IN NS ns.scmlab.com<- 도메인명, 끝에 콤마 주의
78  IN PTR scmlab.com<- 자신의 도메인명, 끝에 콤마 주의
========================================================

위의 파일들을 생성 후 bind9를 실행시키면 됩니다.


출처 : 리룩스포털

출처 : http://gag.aaa.tohttp://gagstory.aaa.to

'Programming > tool' 카테고리의 다른 글

04) named.ca, localhost.zone, named.local 파일 만들기  (0) 2010.03.19
03) named.conf 파일 만들기  (0) 2010.03.19
01) XP에 DNS 설치  (0) 2010.03.19
IIS, FTP 설치  (0) 2010.03.19
VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18

☆ 1. 다운로드(http://www.isc.org)
- 아래 그림처럼 윈도용 최신버전을 다운받는다.

dns01.jpg

- BIND9.3.2.zip를 다운받았으면 압축을 풀고 폴더를 확인한다.다음과 같을 것이다.
dns02.jpg


☆ 2. 설치
- BINDinstall.exe를 실행시킨다.

dns03.gif
① 설치할 경로를 지정한다. 없다면 생성할것인가라는 창이뜬다. 필자는 C:\dns로 지정했다.
② 패스워드를 적는다..솔직히 왜 적는지 모르겠다. 3번은 확인차 적는것이다.
④ install을 클릭하면 자동으로 설치가 완료된다.


☆ 3. 설정
- 설치후 c:\dns 폴더를 확인하면 bin과 etc폴더가 생성되어 있음을 알수있다.
dns04.gif
- bin 폴더에는 프로세서를 실행할수 있는 파일들이 있고, etc 폴더는 비어있다.
- 이상태로는 아무것도 실행을 할 수 없다.
- 기본적으로 local.zone named.conf 파일과 domain.zone 파일 domain.rev파일 named.ca파일은 존재해야한다.
- 필자는 위 파일 모두를 etc폴더에 위치시켰다.
- 어떤 경로에서 프로세서를 실행할 수 있도록 Path에 C:\dns\bin 을 추가하자.

[path추가]
- 시스템등록정보 -> 고급 -> 환경변수로 들어간다.
- 편집클릭
dns05.gif

- 다음을 추가한다.
dns06.gif
- 확인 -> 확인 -> 확인
- 이젠 도스창 어느경로에서든 DNS관련 프로세서를 실행시킬 수 있다.


[etc 폴더 살펴보기]
- 여기까지 필자의 폴더를 한번 살펴보겠다.
- bin 폴더는 설치때 생성된것이라 모두 같을 것이다.
- etc 폴더에는 필자가 5개의 파일을 생성했다.
5개의 파일 생성 샘플 보기
Snap21.png

[rndc.key생성 rndc.conf설정]
- rndc.key 생성
- 시작 -> 실행 -> cmd 도스창을 띄운후 아래와 같이 실행한다.


Snap2.png
- rndc-confgen 까지는 띄우지 말고 붙여서 작성하고 -a 는 한칸 띄워서 적는다.

- rndc.conf 생성

Snap5.png

- 위와 똑같이 rndc-confgen > c:\dns\etc\rndc.conf 를 적어 준다.


- c:\dns\etc 폴더에 rndc.key와 rndc.conf 가 생성되었다.

Snap3.png 


-rndc.key를 메모장으로 열어보자.

Snap4.png

-밑줄친 부분을  named.conf에 넣어 주면 된다.


☆ 4. 실행
모든 설정이 완료된 후에 실행을 한다. (5개의 파일 생성 샘플 보기)
- 실행은 아래와 같이 한다.(command창에서)

dns12.gif
- 프로세서가 실행되었는지 확인한다.
dns13.gif

- 윈도우 작업관리자에 네임서버 프로세서가 활성화 되었음이 확인된다.
- 모든것이 이상없이 실행이 되었다.


☆ 5. 기타
- zone파일과 zone.rev파일을 잘 설정하면 여러가지 도메인을 사용할 수 있을것이다.
- 위 두 파일에 서브도메인을 추가한 후 프로세서를 다시 시작하려면...
- 이때 rndc를 사용하면 아주 편리하다.
- 네임서버가 가동된 상태에서 프로세서를 다시구동하려면 rndc reload 해주면 만사 OK

[rndc reload]
dns14.gif
- 위와 같이 server reload successful 메세지가 출력되면 새로운내용이 적용된 것이다.
- 이렇게 해서 모든 설명이 끝났다.


☆ 6. 프로세서 서비스 설정
- 시스템이 시작하면 프로세서가 자동으로 작동되어야 한다.
- DNS서버를 인스톨할때 서비스에 자동으로 ISC BIND가 등록이된다.


dns15.gif

- 현재는 서비스가 중지된 상태이다.

- 서비스를 자동 시작되도록 설정한다.
dns16.gif

- 로컬 시스템 계정 선택한다.
dns17.gif

- 서비스 시작 클릭
dns18.gif

- 서비스가 자동 시작으로 설정된것을 확인한다.

dns19.gif
- 시스템을 재시작후 윈도우 작업관리자에 named.exe 프로세서가 가동중임을 확인한다.



출처 : welchsjam blog

출처 : http://gag.aaa.tohttp://gagstory.aaa.to

'Programming > tool' 카테고리의 다른 글

03) named.conf 파일 만들기  (0) 2010.03.19
02) [DNS for XP] BIND9에서 named.conf, zone 파일 설정  (0) 2010.03.19
IIS, FTP 설치  (0) 2010.03.19
VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18
Visual Studio 2008 설정  (0) 2010.03.18

Snap6.png

'ByteCode > C#' 카테고리의 다른 글

MSSQL 값 쓰기  (0) 2010.03.19
Response Class  (0) 2010.03.19
Session 변수 사용하기  (0) 2010.03.19
SmtpMail 클래스로 보내기  (0) 2010.03.19
SmtpClient 클래스로 메일 보내기  (0) 2010.03.19

Snap7.png


값 넣을때 이런식으로 넣더라 참고 하자.ㅋㅋㅋ

'ByteCode > C#' 카테고리의 다른 글

MSSQL 값 읽기  (0) 2010.03.19
Response Class  (0) 2010.03.19
Session 변수 사용하기  (0) 2010.03.19
SmtpMail 클래스로 보내기  (0) 2010.03.19
SmtpClient 클래스로 메일 보내기  (0) 2010.03.19

페이지 이동-> Response.Redirect("이동할 페이지");

페이지에 코드 삽입 -> Response.Write("내용");


'ByteCode > C#' 카테고리의 다른 글

MSSQL 값 읽기  (0) 2010.03.19
MSSQL 값 쓰기  (0) 2010.03.19
Session 변수 사용하기  (0) 2010.03.19
SmtpMail 클래스로 보내기  (0) 2010.03.19
SmtpClient 클래스로 메일 보내기  (0) 2010.03.19

1) a.aspx 에서 b.aspx로 Session 변수를 이용해 값 전달

a.aspx

-> Session["세션변수명"] = TextBox1.Text; // 세션변수에 TextBox1.Text를 넣는다.


b.aspx

-> String strSession = Convert.ToString(Session["세션변수명"]); // 세션변수명에서 데이터를 읽어와 문자열로 저장한다.

'ByteCode > C#' 카테고리의 다른 글

MSSQL 값 쓰기  (0) 2010.03.19
Response Class  (0) 2010.03.19
SmtpMail 클래스로 보내기  (0) 2010.03.19
SmtpClient 클래스로 메일 보내기  (0) 2010.03.19
C# Socket Helper Class  (0) 2010.03.18

여기에서는 내 PC가 아닌 다른 PC에서 작업을 하는 경우에  파일 복사 같은 것이 아니라 ftp를 이용하여 간단하게 파일을 전송해서 사용을 하는 방식으로 사용을 한다. 그럼 하나 하나 설정을 하면서 살펴보기로 한다.

먼저 [제어판]->[프로그램 추가 삭제]->[windows 구성 요소 추가 삭제]->[인터넷 정보 서비스[IIS]]을 선택을 한다. 그럼 아래 그림과 같은 화면이 된다.

[그림 2] IIS 선택 이미지


 

그 후에 자세히를 누르면 아래 그림과 같은 이미지가 나타난다.

 




                                        [그림 3] IIS 자세히 선택 화면


[ 그림 3]에서와 같이 File Transfer Protocol(FTP) 서비스와 World Wide Web 서비스를 선택을 한다. 그러면 아마 Windows XP CD 넣으라는 화면이 나오는데 CD넣고 설치를 하면 된다. 일단 설치를 한 후에 IP로 http를 해본다 되는지 확인을 하기 위해서 그러면 아마 방화벽 이런게 없다면 작업중이라는 화면이 보일 것이다. 만약 방화벽이 설치되어 있어서 연결이 안된다면 다음과 같은 방법으로 해결을 하면 된다.

[제어판] -> [방화벽] ->[일반 탭] 에서 사용 안함을 선택을 한다. 또한 하나의 Tip이 있는데 이건 네이버 블로그 나도 HD영상을 갖고 싶다에서 찾은 방식인데 [제어판]->[방화벽]-[고급]-[네트워크 설정]-[설정] 선택을 해서 아래 그림과 같이 선택을 해주는 방법도 있다.

 

[그림 4] 방화벽 고급 탭의 고급 설정

일단 여기까지가 기본 설정이다. 그 다음에 설정을 해주어야 하는게 바로  FTP 설정인데 이거 상당히 귀찮코 빡세다. 젠장이다.

 먼저 [제어판] – [관리 도구] – [인터넷 정보 서비스] – [FTP 사이트] –[기본 FTP 사이트] 에서 속성을 누른 후에 보안 계정 탭에서 익명 연결 허용을 선택 해제를 한 뒤 적용을 누른 후 확인을 누른다. 그림은 아래와 같다

.



[그림 5] 익명 연결 허용 삭제

이제 폴더 옵션에서 모든 사용자에세 동일한 폴더 공유 지정을 해제를 해 준다. 이제 ftp를 기본으로 사용할 폴더로 이동을 하여 속성을 누른 후에 공유 폴더를 설정을 하면 된다. 그림은 아래와 같다.                                

[그림 6] 사용자 권한


위의 그림에서 만약 계정을 추가하고 싶으면 추가를 해주면 된다. 또 한가지 파일 전송 오류가 나는 경우에는 용량 제한이 걸려있는지 확인을 해 보고 또한 FTP 서버 폴더로 사용할 폴더의 권한을 확인을 해 볼 필요가 있다.


'Programming > tool' 카테고리의 다른 글

02) [DNS for XP] BIND9에서 named.conf, zone 파일 설정  (0) 2010.03.19
01) XP에 DNS 설치  (0) 2010.03.19
VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18
Visual Studio 2008 설정  (0) 2010.03.18
NSIS 값 읽어오기  (0) 2010.03.18

using System.Web.Mail;
using System.Net.Mail;


String strTo = "moltak@gmail.com";

String strFrom = "helios@hanbitnet.com";

String strSubject = "메일 보내기 테스트";

try
{

      SmtpMail.Send(strFrom, strTo, strSubject, "메일 테스트 입니다");

}
catch(SmtpException ex)
{
      throw new Exception(ex.Message, ex);




아래와 같이 SMTP 서비스가 구동되고 있어야 한다.

Snap7.jpg



기본 SMTP 가상 서버 등록 정보에서 "연결 제어" "릴레이 제한"에 들어가서 localhost를  허가 시켜 주어야 한다.

Snap8.jpg

Snap9.jpg

Snap10.jpg

'ByteCode > C#' 카테고리의 다른 글

Response Class  (0) 2010.03.19
Session 변수 사용하기  (0) 2010.03.19
SmtpClient 클래스로 메일 보내기  (0) 2010.03.19
C# Socket Helper Class  (0) 2010.03.18
IP 주소 관련 클래스  (0) 2010.03.18

닷넷의 SmtpClient 클래스를 사용하여 메일을 보내는 방법입니다.

MSDN의 예제는 빠진 부분이 많아서 그걸 사용하면 제대로 되지 않더군요
삽질하다가 구글링으로 알아냈습니다.


아래 예제는 구글의 Gmail을 사용하는 것으로 했습니다..

Gmail의 주소는 smtp.gmail.com 입니다.
            포트번호는 587을 사용합니다.

            구글에서는 465도 사용 할수 있다고 하지만 사용하면 연결이 되지 않습니다.


SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.UseDefaultCredentials = false; // 시스템에 설정된 인증 정보를 사용하지 않는다.
client.EnableSsl = true;  // SSL을 사용한다.
client.DeliveryMethod = SmtpDeliveryMethod.Network; // 이걸 하지 않으면 Gmail에 인증을 받지 못한다.
client.Credentials = new System.Net.NetworkCredential("구글 아이디", "패스워드");
            
MailAddress from = new MailAddress("jacking12343@gmail.com","최흥배",         System.Text.Encoding.UTF8);
MailAddress to = new MailAddress("jacking@dyon.co.kr");
                        
 MailMessage message = new MailMessage(from, to);

 message.Body = "This is a test e-mail message sent by an application. ";
 string someArrows = new string(new char[] { '\u2190', '\u2191', '\u2192', '\u2193' });
 message.Body += Environment.NewLine + someArrows;
 message.BodyEncoding = System.Text.Encoding.UTF8;
 message.Subject = "test message 2" + someArrows;
 message.SubjectEncoding = System.Text.Encoding.UTF8;

 try
 {
      // 동기로 메일을 보낸다.
      client.Send(message);
                
       // Clean up.
       message.Dispose();
 }
 catch (Exception ex)
 {
       MessageBox.Show(ex.ToString());
 }

'ByteCode > C#' 카테고리의 다른 글

Session 변수 사용하기  (0) 2010.03.19
SmtpMail 클래스로 보내기  (0) 2010.03.19
C# Socket Helper Class  (0) 2010.03.18
IP 주소 관련 클래스  (0) 2010.03.18
TCP Socket  (0) 2010.03.18

WSAData wsaData;

int nError;


nError = WSAStartup( MAKEWORD( 2, 2 ), &wsaData );

if( nError != 0 )

// error 

'NativeCode > api' 카테고리의 다른 글

Server Socket  (0) 2010.03.19
Client Socket  (0) 2010.03.19
소켓 함수 정리  (0) 2010.03.19
C++ Style Socket  (0) 2010.03.19
Client Source  (0) 2010.03.19

소켓 초기화 시키기

보통 WSAStartup -> socket -> closesocket -> WSACleanup 순으로 이뤄진다.

서버 WSAStartup -> socket -> bind -> listen ->  accept -> closesocket -> WSACleanup

클라 WSAStartup -> socket -> connect -> closesocket -> WSACleanup


WSADATA wsaData;

SOCKET sock;

SOCKADDR_IN addr;


WSAStartup( MAKEWORD( 2, 2 ), &wsaData );

sock = socket( AF_INET, SOCK_STREAM, 0 );


memset( ( void * )&addr, 0, sizeof( SOCKADDR_IN ) );

addr.sin_family = AF_INET;

addr.sin_addr.s_addr = inet_addr( IP_ADDRESS );

addr.sin_port = htons( PORT_NUMBER );


closesocket( sock );

WSACleanup();

'NativeCode > api' 카테고리의 다른 글

Client Socket  (0) 2010.03.19
① WSAStartup  (0) 2010.03.19
C++ Style Socket  (0) 2010.03.19
Client Source  (0) 2010.03.19
Server Source  (0) 2010.03.19

Snap6.png


바로 쓸수 있는 건 아니고... 이런 식으로 만들면 된다. 앞에 있는 예제는 api 에서는 저렇게 하고 C++ 문법으로는 이렇게 한다.

나는 Exception Class를 직접 만들어서 사용했으며 그 예외를 호출쪽에서 처리할 수 있도록 제작하였다.

기존 api 방식의 문법은 눈에 잘 들어오지 않는 단점이 있으며 위의 방법은 눈에 잘 들어오고 구조적이라는 장점이 있다.

'NativeCode > api' 카테고리의 다른 글

① WSAStartup  (0) 2010.03.19
소켓 함수 정리  (0) 2010.03.19
Client Source  (0) 2010.03.19
Server Source  (0) 2010.03.19
winsock 자신의 아이피 알아내기  (0) 2010.03.19

#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib,"wsock32.lib")

void main()
{
    SOCKET s;
    SOCKADDR_IN sin;
    WSADATA wsaData;
    if(WSAStartup(MAKEWORD(2,0),&wsaData) != NO_ERROR)
    {
        printf("WSAStartup failed, error code : %d\n",WSAGetLastError());
        return ;
    }

    s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

    if(s == INVALID_SOCKET)
    {
        printf("make socket failed, error code : %d\n",WSAGetLastError());
        WSACleanup();
        return ;
    }

    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
    sin.sin_port = htons(912);

    if(connect(s,(struct sockaddr*)&sin,sizeof(sin)) != NO_ERROR)
    {
        printf("connect failed, error code = %u \n",WSAGetLastError());
        closesocket(s);
        WSACleanup();
        return ;
    }

    if(closesocket(s) != NO_ERROR)
    {
        printf("remove socket failed, error code : %u\n",WSAGetLastError());
        WSACleanup();
        return ;
    }

    if(WSACleanup() != NO_ERROR)
    {
        printf("WSACleanup failed, error code = &u\n",WSAGetLastError());
        return ;
    }

    printf("127.0.0.1의 912번 포트에 접속을 성공하셨습니다.\n");
}

'NativeCode > api' 카테고리의 다른 글

소켓 함수 정리  (0) 2010.03.19
C++ Style Socket  (0) 2010.03.19
Server Source  (0) 2010.03.19
winsock 자신의 아이피 알아내기  (0) 2010.03.19
Winsock 상대방 아이피, 포트 알아내기  (0) 2010.03.19

#include <stdio.h>
#include <winsock2.h>

void main()
{

    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
    if ( iResult != NO_ERROR )
        printf("Error at WSAStartup()\n");

    // Create a socket.
    SOCKET m_socket;
    m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

    if ( m_socket == INVALID_SOCKET )
    {
        printf( "Error at socket(): %ld\n", WSAGetLastError() );
        WSACleanup();
        return;
    }

    // Bind the socket.
    sockaddr_in service;

    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
    service.sin_port = htons( 27015 );

    if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR )
    {
        printf( "bind() failed.\n" );
        closesocket(m_socket);
        return;
    }

    // Listen on the socket.
    if ( listen( m_socket, 1 ) == SOCKET_ERROR )
        printf( "Error listening on socket.\n");

    // Accept connections.
    SOCKET AcceptSocket;

    printf( "Waiting for a client to connect...\n" );
    while (1)
    {
        AcceptSocket = SOCKET_ERROR;
        while ( AcceptSocket == SOCKET_ERROR )
        {
            AcceptSocket = accept( m_socket, NULL, NULL );
        }
        printf( "Client Connected.\n");
        m_socket = AcceptSocket;
        break;
    }

    // Send and receive data.
    int bytesSent;
    int bytesRecv = SOCKET_ERROR;
    char sendbuf[32] = "조산 서버";
    char recvbuf[32] = "";

    bytesRecv = recv( m_socket, recvbuf, 32, 0 );
    printf( "Bytes Recv: %ld\n", bytesRecv );

    bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
    printf( "Bytes Sent: %ld\n", bytesSent );

    printf("Recv Buf: %s\n", recvbuf);

    return;
}

'NativeCode > api' 카테고리의 다른 글

C++ Style Socket  (0) 2010.03.19
Client Source  (0) 2010.03.19
winsock 자신의 아이피 알아내기  (0) 2010.03.19
Winsock 상대방 아이피, 포트 알아내기  (0) 2010.03.19
IPHLPAPI(IP Helper API) functions  (0) 2010.03.19

char lHostName[ 255 ];

PHOSTENT lHostInfo;

char *IpBuffer;

WSADATA wsaData;


if( WSAStartup( MAKEWORD( 2,0 ), &wsaData ) == 0 )

{

if( gethostname( lHostName, 255 ) == 0 )

{

if( ( lHostInfo = gethostbyname( lHostName ) ) != NULL )

{

IpBuffer = inet_ntoa( *( struct in_addr * )*lHostInfo->h_addr_list );

}

}

}


CString LocalAdap;
 CString LocalMac;
 CString LocalIP;
 CString LocalSub;
 CString LocalGate;

 PIP_ADAPTER_INFO pAdapterInfo;
 PIP_ADAPTER_INFO pAdapter = NULL;

 DWORD dwRetVal = 0;
 BOOL m_bBreak = FALSE;

 pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
 unsigned long ulOutBufLen = sizeof(IP_ADAPTER_INFO);

 UpdateData(true);

 if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS)
 {
  GlobalFree(pAdapterInfo);
  pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);
 }

 if((dwRetVal=GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
 {
  pAdapter = pAdapterInfo;
  while(pAdapter)
  {
   LocalAdap.Format (_T("%s"), (CA2W)pAdapter->Description);
   m_listbox.AddString(LocalAdap);

   LocalMac.Format (_T("MAC : %02X-%02X-%02X-%02X-%02X-%02X"),pAdapter->Address[0],pAdapter->Address[1], 
    pAdapter->Address[2], pAdapter->Address[3], pAdapter->Address[4], pAdapter->Address[5]);
   m_listbox.AddString((_T("MAC :"), LocalMac));

   LocalIP.Format (_T("IP : %s"), (CA2W)pAdapter->IpAddressList.IpAddress.String);
   m_listbox.AddString(LocalIP);

   LocalSub.Format (_T("Local : %s"), (CA2W)pAdapter->IpAddressList.IpMask.String);
   m_listbox.AddString(LocalSub);

   if(pAdapter->Next == NULL)
   {
    m_bBreak = TRUE;
    break;
   }
   pAdapter = pAdapter->Next;
  }
 }

'NativeCode > api' 카테고리의 다른 글

Client Source  (0) 2010.03.19
Server Source  (0) 2010.03.19
Winsock 상대방 아이피, 포트 알아내기  (0) 2010.03.19
IPHLPAPI(IP Helper API) functions  (0) 2010.03.19
CSocket 과 CAsyncSocket에서 Thread문제  (0) 2010.03.19

클라이언트의 접속을 받아 드릴때 accept 함수를 사용하게 된다.

이때 accept 함수에 인자를 세개를 넣게 되는데 두번째 인자에 클라이언트에 대한 정보를 넣을 수 있다.

이때 세번째 인자에는 받아야할 데이터 크기에 대한 변수를 넣어야 한다. 데이터 크기가 다르면

뻑날 수도 있다. ㅋ


sockaddr_in clientInfo = { 0 };

int addrsize= sizeofsockaddr_in );
client = accept( m_Socket, ( sockaddr * )&clientInfo, &addrsize );


printf( "ip = %s  port = %d\n", inet_ntoa( clientInfo.sin_addr ),  ntohs( ( short )clientInfo.sin_port ) );

'NativeCode > api' 카테고리의 다른 글

Server Source  (0) 2010.03.19
winsock 자신의 아이피 알아내기  (0) 2010.03.19
IPHLPAPI(IP Helper API) functions  (0) 2010.03.19
CSocket 과 CAsyncSocket에서 Thread문제  (0) 2010.03.19
HTTP 긁어오기 (소스파일 有)  (0) 2010.03.19

IPHLPAPI(IP Helper API) functions

Headers


#include <winsock2.h>
#include <iphlpapi.h>

Library

  • WS2_32.lib
  • IPHLPAPI.lib

Adapter Configuration


DWORD
GetAdapterIndex(
  LPWSTR AdapterName,
  PULONG IfIndex
);

DWORD WINAPI
GetAdaptersAddresses(
  ULONG Family,
  DWORD Flags,
  PVOID Reserved,
  PIP_ADAPTER_ADDRESSES pAdapterAddresses,
  PULONG pOutBufLen
);

DWORD
GetAdaptersInfo(
  PIP_ADAPTER_INFO pAdapterInfo,
  PULONG pOutBufLen
);

DWORD
GetPerAdapterInfo(
  ULONG IfIndex,
  PIP_PER_ADAPTER_INFO pPerAdapterInfo,
  PULONG pOutBufLen
);

DWORD
GetUniDirectionalAdapterInfo(
  PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo,
  PULONG dwOutBufLen
);

ARP


DWORD
CreateIpNetEntry(
  PMIB_IPNETROW pArpEntry
);

DWORD
CreateProxyArpEntry(
  DWORD dwAddress,
  DWORD dwMask,
  DWORD dwIfIndex
);

DWORD
DeleteIpNetEntry(
  PMIB_IPNETROW pArpEntry
);

DWORD
DeleteProxyArpEntry(
  DWORD dwAddress,
  DWORD dwMask,
  DWORD dwIfIndex
);

DWORD
FlushIpNetTable(
  DWORD dwIfIndex
);

DWORD
GetIpNetTable(
  PMIB_IPNETTABLE pIpNetTable,
  PULONG pdwSize,
  BOOL bOrder
);

DWORD
SendARP(
  IPAddr DestIP,
  IPAddr SrcIP,
  PULONG pMacAddr,
  PULONG PhyAddrLen
);

DWORD
SetIpNetEntry(
  PMIB_IPNETROW pArpEntry
);

Network Interface


DWORD
GetFriendlyIfIndex(
  DWORD IfIndex
);

DWORD
GetIfEntry(
  PMIB_IFROW pIfRow
);

DWORD
GetIfTable(
  PMIB_IFTABLE pIfTable,
  PULONG pdwSize,
  BOOL bOrder
);

DWORD
GetInterfaceInfo(
  PIP_INTERFACE_INFO pIfTable,
  PULONG dwOutBufLen
);

DWORD
GetNumberOfInterfaces(
  PDWORD pdwNumIf
);

DWORD
SetIfEntry(
  PMIB_IFROW pIfRow
);

IP, ICMP


DWORD
GetIcmpStatistics(
  PMIB_ICMP pStats
);

DWORD
GetIpStatistics(
  PMIB_IPSTATS pStats
);

BOOL
IcmpCloseHandle(
  HANDLE IcmpHandle
);

HANDLE
IcmpCreateFile(void);

DWORD
IcmpParseReplies(
  LPVOID ReplyBuffer,
  DWORD ReplySize
);

DWORD
IcmpSendEcho(
  HANDLE IcmpHandle,
  IPAddr DestinationAddress,
  LPVOID RequestData,
  WORD RequestSize,
  PIP_OPTION_INFORMATION RequestOptions,
  LPVOID ReplyBuffer,
  DWORD ReplySize,
  DWORD Timeout
);

DWORD
IcmpSendEcho2(
  HANDLE IcmpHandle,
  HANDLE Event,
  FARPROC ApcRoutine,
  PVOID ApcContext,
  IPAddr DestinationAddress,
  LPVOID RequestData,
  WORD RequestSize,
  PIP_OPTION_INFORMATION RequestOptions,
  LPVOID ReplyBuffer,
  DWORD ReplySize,
  DWORD Timeout
);

DWORD
SetIpStatistics(
  PMIB_IPSTATS pIpStats
);

DWORD
SetIpTTL(
  UINT nTTL
);

IP address configuration


DWORD
AddIPAddress(
  IPAddr Address,
  IPMask IpMask,
  DWORD IfIndex,
  PULONG NTEContext,
  PULONG NTEInstance
);

DWORD
DeleteIPAddress(
  ULONG NTEContext
);

DWORD
GetIpAddrTable(
  PMIB_IPADDRTABLE pIpAddrTable,
  PULONG pdwSize,
  BOOL bOrder
);

DWORD
IpReleaseAddress(
  PIP_ADAPTER_INDEX_MAP AdapterInfo
);

DWORD
IpRenewAddress(
  PIP_ADAPTER_INDEX_MAP AdapterInfo
);

Network configuration


DWORD
GetNetworkParams(
  PFIXED_INFO pFixedInfo,
  PULONG pOutBufLen
);

Notification


DWORD
NotifyAddrChange(
  PHANDLE Handle,
  LPOVERLAPPED overlapped
);

DWORD
NotifyRouteChange(
  PHANDLE Handle,
  LPOVERLAPPED overlapped
);

Routing


DWORD
CreateIpForwardEntry(
  PMIB_IPFORWARDROW pRoute
);

DWORD
DeleteIpForwardEntry(
  PMIB_IPFORWARDROW pRoute
);

DWORD WINAPI
EnableRouter(
  HANDLE* pHandle,
  OVERLAPPED* pOverlapped
);

DWORD
GetBestInterface(
  IPAddr dwDestAddr,
  PDWORD pdwBestIfIndex
);

DWORD
GetBestRoute(
  DWORD dwDestAddr,
  DWORD dwSourceAddr,
  PMIB_IPFORWARDROW pBestRoute
);

DWORD
GetIpForwardTable(
  PMIB_IPFORWARDTABLE pIpForwardTable,
  PULONG pdwSize,
  BOOL bOrder
);

BOOL
GetRTTAndHopCount(
  IPAddr DestIpAddress,
  PULONG HopCount,
  ULONG MaxHops,
  PULONG RTT
);

DWORD
SetIpForwardEntry(
  PMIB_IPFORWARDROW pRoute
);

DWORD WINAPI
UnenableRouter(
  OVERLAPPED* pOverlapped,
  LPDWORD lpdwEnableCount
);

TCP, UDP


DWORD
GetExtendedTcpTable(
  PVOID pTcpTable,
  PDWORD pdwSize,
  BOOL bOrder,
  ULONG ulAf,
  TCP_TABLE_CLASS TableClass,
  ULONG Reserved
);

DWORD
GetExtendedUdpTable(
  PVOID pUdpTable,
  PDWORD pdwSize,
  BOOL bOrder,
  ULONG ulAf,
  UDP_TABLE_CLASS TableClass,
  ULONG Reserved
);

DWORD
GetOwnerModuleFromTcpEntry(
  PMIB_TCPROW_OWNER_MODULE pTcpEntry,
  TCPIP_OWNER_MODULE_INFO_CLASS Class,
  PVOID Buffer,
  PDWORD pdwSize
);

DWORD
GetOwnerModuleFromTcp6Entry(
  PMIB_TCP6ROW_OWNER_MODULE pTcpEntry,
  TCPIP_OWNER_MODULE_INFO_CLASS Class,
  PVOID Buffer,
  PDWORD pdwSize
);

DWORD
GetOwnerModuleFromUdpEntry(
  PMIB_UDPROW_OWNER_MODULE pUdpEntry,
  TCPIP_OWNER_MODULE_INFO_CLASS Class,
  PVOID Buffer,
  PDWORD pdwSize
);

DWORD
GetOwnerModuleFromUdp6Entry(
  PMIB_UDP6ROW_OWNER_MODULE pUdpEntry,
  TCPIP_OWNER_MODULE_INFO_CLASS Class,
  PVOID Buffer,
  PDWORD pdwSize
);

DWORD
GetTcpStatistics(
  PMIB_TCPSTATS pStats
);

DWORD
GetTcpTable(
  PMIB_TCPTABLE pTcpTable,
  PDWORD pdwSize,
  BOOL bOrder
);

DWORD
SetTcpEntry(
  PMIB_TCPROW pTcpRow
);

DWORD
GetUdpStatistics(
  PMIB_UDPSTATS pStats
);

DWORD
GetUdpTable(
  PMIB_UDPTABLE pUdpTable,
  PDWORD pdwSize,
  BOOL bOrder
);

'NativeCode > api' 카테고리의 다른 글

winsock 자신의 아이피 알아내기  (0) 2010.03.19
Winsock 상대방 아이피, 포트 알아내기  (0) 2010.03.19
CSocket 과 CAsyncSocket에서 Thread문제  (0) 2010.03.19
HTTP 긁어오기 (소스파일 有)  (0) 2010.03.19
FTP  (0) 2010.03.19

1.요약

CSocket / CAsyncSocket을 생성한 곳이 아닌 다른 Thread로 넘겨 처리할 경우 CSocket이 가진 Thread state가 변해 에러가 발생합니다.

예를들어 한쪽에서는 Listen을 하여 클라이언트 Socket을 Accept하고, Thread를 생성시켜 Socket전송을 맡길 경우에 Thread문제를 해결하는 방법을 소개하겠습니다.


2.본문

방법은 간단합니다.
Accept한 Socket을 Deatch시키고 거기에서 나온 handle을 Thread로 넘김니다.
그리고 Thread에서 handle을 Attach시켜 CSocket / CAsyncSocket 개체 인스턴스를 만들어 사용하면 됩니다. 

'NativeCode > api' 카테고리의 다른 글

Winsock 상대방 아이피, 포트 알아내기  (0) 2010.03.19
IPHLPAPI(IP Helper API) functions  (0) 2010.03.19
HTTP 긁어오기 (소스파일 有)  (0) 2010.03.19
FTP  (0) 2010.03.19
HTTPS GET - Download HTML from HTTPS URL  (0) 2010.03.19

MFC Source HTTP_소스_긁어오기.zip

#include "AFXINET.H"

CInternetSession* pSession = NULL;
CStdioFile* pFile = NULL;
TCHAR szError[1024] = {0};

TRY 
{
  pSession = new CInternetSession;
  pFile = pSession->OpenURL( "http://www.devpia.com" );
}
CATCH( CInternetException, pEx )
{
  pEx->GetErrorMessage( szError, 1024 );
}

END_CATCH

if( pFile != NULL )
{
  //여기서 웹페이지 내용을 가지고 처리
  //HTTP를 호출했을 시
  CHttpFile* pHttpFile = (CHttpFile*)pFile;
  
  /*원하는 코드를 실행한다.*/
  // pHttpFile->ReadString(CString DataType);
  
  delete pHttpFile;
  pHttpFile = NULL;
  pFile = NULL;
}

if( pSession != NULL )
{
  //pSession->Close(); //CInternetSession 소멸자가 알아서 호출함
  delete pSession;
  pSession = NULL;
}

/*
  파라미터를 GET 방식으로 넘기시려면 ...

  CInternetSession::OpenURL()로 접속할 URL과 파라미터 넘겨주면,
  CStdioFile 포인터를 넘겨 주거든요. 그냥 파일 처럼 처리하시면 되겠네요.

  OpenURL("http://localhost/test.asp?name=하나")
  이런 식으로 처리하실 수 있습니다


  파라미터를 POST 방식으로 넘기시려면 ...
  CInternetSession::GetHttpConnection()으로 HTTP 커넥션 맺어 주시고,
  CHttpConnection::OpenRequest()로 URL에 접속해서,
  CHttpFile::AddRequestHeaders()로 헤더와 POST 정보를 추가해서 ...
  CHttpFile::SendRequest()로 데이터 날려 주시면 됩니다.
*/

'NativeCode > api' 카테고리의 다른 글

IPHLPAPI(IP Helper API) functions  (0) 2010.03.19
CSocket 과 CAsyncSocket에서 Thread문제  (0) 2010.03.19
FTP  (0) 2010.03.19
HTTPS GET - Download HTML from HTTPS URL  (0) 2010.03.19
CkLibrary  (1) 2010.03.19

void OnDownLoad()

{

CInternetSession session;

CFtpConnection *pConnection = NULL;

CFtpFileFind *pFileFind = NULL;

CString csStr;

CString csFileName;

BOOL bContinue;


try

{

pConnection = session.GetFtpConnection( "220.67.202.123", "h7", "h7" );

pConnection->GetCurrentDirectory( csStr );

pFileFind = new CFtpFileFind( pConnection );

bContinue = pFileFind->FindFile( csStr );


while( bContinue )

{

bContinue = pFileFind->FindNextFile();

csFileName = pFileFind->GetFileName();


if( !pFileFind->IsDirectory() )

{

pConnection->GetFile( csFileName, csFileName );

}

}

catch (CFileException* e)

{

e->ReportError();

}

catch(CInternetException *e)

{

e->ReportError();

}

}


pConnection->Close();

delete pFileFind;

}


Snap1.bmp

'NativeCode > api' 카테고리의 다른 글

CSocket 과 CAsyncSocket에서 Thread문제  (0) 2010.03.19
HTTP 긁어오기 (소스파일 有)  (0) 2010.03.19
HTTPS GET - Download HTML from HTTPS URL  (0) 2010.03.19
CkLibrary  (1) 2010.03.19
Sendarp 사용법  (0) 2010.03.19

+ Recent posts